mirror of
https://github.com/autc04/Retro68.git
synced 2024-06-08 04:29:46 +00:00
164 lines
4.3 KiB
C++
164 lines
4.3 KiB
C++
/* Copyright (C) 2021 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. */
|
|
|
|
#ifndef _METRICLIST_H
|
|
#define _METRICLIST_H
|
|
|
|
#include "dbe_structs.h"
|
|
#include "vec.h"
|
|
#include "enums.h"
|
|
#include "Metric.h"
|
|
#include "DerivedMetrics.h"
|
|
#include <stdio.h>
|
|
|
|
//
|
|
// The MetricList class is used to manage a list of metrics
|
|
|
|
class MetricList
|
|
{
|
|
public:
|
|
|
|
MetricList (Vector<BaseMetric*> *base_metrics, MetricType type);
|
|
MetricList (MetricList *old);
|
|
MetricList (MetricType _mtype);
|
|
~MetricList ();
|
|
|
|
// Methods concerning a list of metrics
|
|
// set metrics -- text, caller-callee, data, and index flavors
|
|
// flavor depends on mtype in the list
|
|
// returns NULL if OK, or an error string if not
|
|
// always returns NULL if fromRcFile is TRUE
|
|
char *set_metrics (const char *metric_cmd, bool fromRcFile, DerivedMetrics *derived_metrics);
|
|
|
|
// update the caller-callee or dataspace metrics to match normal metrics
|
|
// It is assumed that this->mtype is MET_CALL, MET_DATA, or MET_INDX and
|
|
// that metrics_list->mtype is MET_NORMAL
|
|
void set_metrics (MetricList *metrics_list);
|
|
|
|
// produce a string for the metrics from a vector
|
|
char *get_metrics ();
|
|
|
|
// set the sort metric for a list from a metric string
|
|
// returns NULL if OK, or an error string if not
|
|
char *set_sort (const char *metric_cmd, bool fromRcFile);
|
|
|
|
// set the sort metric for a list from the first visible index
|
|
void set_fallback_sort ();
|
|
|
|
// set the sort metric for a list from a visible index
|
|
void set_sort (int visindex, bool reverse);
|
|
|
|
char *get_sort_name (); // get the name of the sort metric from a vector
|
|
|
|
bool
|
|
get_sort_rev () // get the boolean reverse for the sort metric
|
|
{
|
|
return sort_reverse;
|
|
}
|
|
|
|
void
|
|
set_sort_rev (bool v)
|
|
{
|
|
sort_reverse = v;
|
|
}
|
|
|
|
int
|
|
get_sort_ref_index ()
|
|
{
|
|
return sort_ref_index;
|
|
}
|
|
|
|
void
|
|
set_sort_ref_index (int ind)
|
|
{
|
|
sort_ref_index = ind;
|
|
}
|
|
|
|
bool set_sort_metric (char *metric_cmd, BaseMetric::SubType mst, bool reverse);
|
|
Metric *find_metric (char *cmd, BaseMetric::SubType st);
|
|
Metric *find_metric_by_name (char *cmd);
|
|
int get_listorder (char *cmd, BaseMetric::SubType st, const char *expr = NULL);
|
|
int get_listorder (Metric *mtr);
|
|
Metric *get_sort_metric (); // get the sort metric from a vector
|
|
char *get_sort_cmd (); // get the command name of the sort metric
|
|
|
|
MetricType
|
|
get_type ()
|
|
{
|
|
return mtype;
|
|
}
|
|
|
|
Vector<Metric*> *
|
|
get_items () // get the vector of metrics from the list
|
|
{
|
|
return items;
|
|
}
|
|
|
|
Metric *
|
|
get (long i)
|
|
{
|
|
return items->get (i);
|
|
}
|
|
|
|
void
|
|
put (long i, Metric *m)
|
|
{
|
|
items->put (i, m);
|
|
}
|
|
|
|
void
|
|
append (Metric *m)
|
|
{
|
|
items->append (m);
|
|
}
|
|
|
|
long
|
|
size ()
|
|
{
|
|
return items ? items->size () : 0;
|
|
}
|
|
|
|
Metric *append (BaseMetric *bm, BaseMetric::SubType st, int visbits);
|
|
|
|
// produce a list of all metrics from a vector
|
|
void print_metric_list (FILE *dis_file, char *leader, int debug);
|
|
|
|
// Add any and all matching metrics to the growing list
|
|
// return value is zero for OK, 1 for no match
|
|
int add_matching_dmetrics (Vector<BaseMetric*> *base_items, char *cmd,
|
|
BaseMetric::SubType *subtypes, int nsubtypes,
|
|
int dmetrics_vis, // literal translation of dmetrics +. etc.
|
|
bool fromRcFile);
|
|
|
|
private:
|
|
// parse a metric specification substring, based on type of list
|
|
char *parse_metric_spec (char *cmd, BaseMetric::SubType *subtypes,
|
|
int *nsubtypes, int *dmetrics_visb, bool *isOK);
|
|
|
|
Vector<Metric*> *items;
|
|
MetricType mtype;
|
|
|
|
// the sort reference index
|
|
int sort_ref_index;
|
|
bool sort_reverse;
|
|
};
|
|
|
|
#endif /* _METRICLIST_H */
|