1 /* $Log: datagrid.h,v $
2 /* Revision 1.2 1994/03/15 02:03:19 newhall
3 /* added public member "userdata" to class visi_GridCellHisto
4 /* to allow visi writer to add info to grid cells
6 * Revision 1.1 1994/03/14 20:27:26 newhall
7 * changed visi subdirectory structure
21 char *units; // how units are measured i.e. "ms"
22 char *name; // for y-axis labeling
23 int Id; // unique metric Id
24 int aggregate; //either SUM or AVE, for fold operation
26 Metric(){units = NULL; name = NULL; Id = NOVALUE; aggregate=SUM;}
27 Metric(char* ,char*,int,int);
28 ~Metric(){delete[] units;delete[] name;}
29 char *Units(){return(units);}
30 char *Name(){return(name);}
31 int Identifier(){return(Id);}
32 int Aggregate(){return(aggregate);}
37 char *name; // obj. name for graph labeling
38 int Id; // unique resource id
40 Resource(){name = NULL; Id = -1;}
42 ~Resource(){ delete[] name;}
43 char *Name(){return(name);}
44 int Identifier(){return(Id);}
48 class visi_GridCellHisto {
54 void *userdata; // to allow visi writer to add info to grid cells
55 visi_GridCellHisto(){value = NULL; valid = 0; size = 0; userdata = NULL;}
56 visi_GridCellHisto(int);
57 ~visi_GridCellHisto(){delete[] value;}
58 float *Value(){ return(value);}
60 if((i < 0) || (i > size)){
65 int Size(){return(size);}
66 int Valid(){return(valid);}
67 void Invalidate(){delete[] value; value = NULL; size = 0; valid = 0;}
68 void Fold(int method){
71 for(i=0,j=0;(i< (size/2)) && (j< (size-1)); i++,j+=2){
72 if((value[j] != ERROR) && (value[j+1] != ERROR))
73 value[i] = value[j] + value[j+1];
76 if((method == AVE) && (value[i] != ERROR))
79 for(i=(size/2); i < size; i++){
84 float AggregateValue(int method){
88 for(sum=0.0,num=i=0; i< size; i++){
89 if(value[i] != ERROR){
97 return(sum/(1.0*num));
100 visi_ErrorHandler(ERROR_AGGREGATE,"divide by zero");
101 return(ERROR_AGGREGATE);
105 visi_ErrorHandler(ERROR_AGGREGATE,"values == NULL");
106 return(ERROR_AGGREGATE);
109 int AddValue(float x,int i,int numElements){
110 /* if this is the first value create a histo cell array */
114 value = new float[numElements];
121 if((i < 0) || (i >= size))
122 return(ERROR_SUBSCRIPT);
127 float operator[](int i){
128 if((i >= size) || (i < 0)){
129 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in [] operator in histogridcell");
137 class visi_GridHistoArray {
139 visi_GridCellHisto *values;
142 visi_GridHistoArray(){values = NULL; size = 0;}
143 visi_GridHistoArray(int);
144 ~visi_GridHistoArray();
145 int AddValue(float x,int resource,int bucketNum,int numBuckets){
146 if((resource < 0) || (resource >= size))
147 return(ERROR_SUBSCRIPT);
148 return(values[resource].AddValue(x,bucketNum,numBuckets));
150 visi_GridCellHisto *Value(){return(values);}
153 int AddNewResources(int,int);
154 void Fold(int method){
156 for(i=0; i< size; i++)
157 values[i].Fold(method);
159 float AggregateValue(int i,int method){
161 return(values[i].AggregateValue(method));
165 visi_GridCellHisto& operator[](int i){
166 if ((i>= 0) && (i < size)){
170 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in [] operator GridHistoArray");
176 class visi_DataGrid {
184 visi_GridHistoArray *data_values;
186 visi_DataGrid(){metrics=NULL; resources=NULL; numMetrics=numResources=0;
187 data_values=NULL; numBins= 0; binWidth=0.0;}
188 visi_DataGrid(int,int,Metric *,Resource *,int,double);
189 visi_DataGrid(int,int,metricType *,resourceType *,int,double);
190 virtual ~visi_DataGrid();
191 char *MetricName(int i);
192 char *MetricUnits(int i);
193 char *ResourceName(int j);
196 int NumMetrics(){return(numMetrics);}
198 int NumResources(){return(numResources);}
199 int MetricId(int); // returns metric Id
200 int ResourceId(int); // returns Resource Id
201 int NumBins(){return(numBins);}
202 double BinWidth(){return(binWidth);}
204 int Invalidate(int,int);
205 float AggregateValue(int i,int j){
206 if((i>=0)&&(i<numMetrics))
207 return(data_values[i].AggregateValue(j,metrics[i].Aggregate()));
211 void Fold(double width){
213 for(i=0; i < numMetrics; i++)
214 data_values[i].Fold(metrics[i].Aggregate());
217 int AddValue(int metric, int resource, int bucket,float value){
218 if((metric < 0) || (metric >= numMetrics))
219 return(ERROR_SUBSCRIPT);
220 return(data_values[metric].AddValue(value,resource,bucket,numBins));
222 visi_GridHistoArray& operator[](int i){
223 if((i < 0) || (i >= numMetrics)){
224 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in [] operator DATAGRID");
225 return(data_values[0]);
227 return(data_values[i]);