Wolfgang Thallergcc16 merge934c3885 months agoHistory
177 lines · 3.9 KB · C++
RawDownload
/* Copyright (C) 2021-2026 Free Software Foundation, Inc.   Contributed by Oracle.    This file is part of GNU Binutils.    This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 3, or (at your option)   any later version.    This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.    You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, 51 Franklin Street - Fifth Floor, Boston,   MA 02110-1301, USA.  */ #include "config.h"#include <time.h> #include "DbeSession.h"#include "Expression.h"#include "StringBuilder.h"#include "util.h"#include "UserLabel.h"#include "debug.h" int UserLabel::last_id = 0; UserLabel::UserLabel (char *_name){  name = dbe_strdup (_name);  comment = str_expr = all_times = hostname = NULL;  start_f = stop_f = false;  expr = NULL;  start_tv.tv_sec = 0;  start_tv.tv_usec = 0;  atime = timeStart = timeStop = start_sec = start_hrtime = 0;  relative = REL_TIME;  id = ++last_id;} UserLabel::~UserLabel (){  free (name);  free (comment);  free (all_times);  free (hostname);  free (str_expr);  delete expr;} voidUserLabel::gen_expr (){  if (!start_f && !stop_f)    return;  StringBuilder sb;  sb.append ('(');  if (str_expr)    {      sb.append (str_expr);      sb.append (NTXT (" || ("));    }  if (start_f)    {      sb.append (NTXT ("TSTAMP"));      sb.append (NTXT (">="));      sb.append (timeStart);      if (stop_f)	{	  sb.append (NTXT (" && "));	}    }  if (stop_f)    {      sb.append (NTXT ("TSTAMP"));      sb.append ('<');      sb.append (timeStop);    }  sb.append (')');  if (str_expr)    {      sb.append (')');      delete str_expr;    }  str_expr = sb.toString ();  start_f = stop_f = false;} voidUserLabel::register_user_label (int groupId){  gen_expr ();  if (str_expr)    {      char *old_str = str_expr;      str_expr = dbe_sprintf (NTXT ("(EXPGRID==%d && %s)"), groupId, old_str);      delete old_str;      UserLabel *ulbl = dbeSession->findUserLabel (name);      if (ulbl)	{	  old_str = ulbl->str_expr;	  ulbl->str_expr = dbe_sprintf (NTXT ("(%s || %s)"), old_str, str_expr);	  delete old_str;	  if (comment)	    {	      if (ulbl->comment)		{		  old_str = ulbl->comment;		  ulbl->comment = dbe_sprintf (NTXT ("%s; %s"), old_str, comment);		  delete old_str;		}	      else		ulbl->comment = dbe_strdup (comment);	    }	  delete ulbl->expr;	  ulbl->expr = dbeSession->ql_parse (ulbl->str_expr);	}      else	{	  expr = dbeSession->ql_parse (str_expr);	  dbeSession->append (this);	}    }} char *UserLabel::dump (){  StringBuilder sb;  sb.append (name);  if (str_expr)    {      sb.append (NTXT ("  str_expr='"));      sb.append (str_expr);      sb.append ('\'');    }  if (all_times)    {      sb.append (NTXT (" atime="));      sb.append ((unsigned int) (atime / NANOSEC));      sb.append ('.');      char buf[128];      snprintf (buf, sizeof (buf), NTXT ("%09llu"), (unsigned long long) (atime % NANOSEC));      sb.append (buf);      sb.append (NTXT ("  all_times='"));      sb.append (all_times);      sb.append ('\'');    }  if (comment)    {      sb.append (NTXT ("  comment='"));      sb.append (comment);      sb.append ('\'');    }  return sb.toString ();} voidUserLabel::dump (const char *msg, Vector<UserLabel*> *labels){  if (!DUMP_USER_LABELS)    return;  if (msg)    fprintf (stderr, NTXT ("%s\n"), msg);  for (int i = 0, sz = labels ? labels->size () : 0; i < sz; i++)    {      UserLabel *lbl = labels->fetch (i);      char *s = lbl->dump ();      fprintf (stderr, NTXT ("%2d %s\n"), i, s);      delete s;    }}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t