1 /* $Log: datagrid.h,v $
2 /* Revision 1.3 1994/03/17 05:17:25 newhall
3 /* added lastBucketFilled data member to class visi_GridCellHisto: value of
4 /* the largest bucket number for which new data values have been added
6 * Revision 1.2 1994/03/15 02:03:19 newhall
7 * added public member "userdata" to class visi_GridCellHisto
8 * to allow visi writer to add info to grid cells
10 * Revision 1.1 1994/03/14 20:27:26 newhall
11 * changed visi subdirectory structure
25 char *units; // how units are measured i.e. "ms"
26 char *name; // for y-axis labeling
27 int Id; // unique metric Id
28 int aggregate; //either SUM or AVE, for fold operation
30 Metric(){units = NULL; name = NULL; Id = NOVALUE; aggregate=SUM;}
31 Metric(char* ,char*,int,int);
32 ~Metric(){delete[] units;delete[] name;}
33 char *Units(){return(units);}
34 char *Name(){return(name);}
35 int Identifier(){return(Id);}
36 int Aggregate(){return(aggregate);}
41 char *name; // obj. name for graph labeling
42 int Id; // unique resource id
44 Resource(){name = NULL; Id = -1;}
46 ~Resource(){ delete[] name;}
47 char *Name(){return(name);}
48 int Identifier(){return(Id);}
52 class visi_GridCellHisto {
57 int lastBucketFilled; // bucket number of last data value added
59 void *userdata; // to allow visi writer to add info to grid cells
60 visi_GridCellHisto(){value = NULL; valid = 0; size = 0; userdata = NULL; lastBucketFilled = -1;}
61 visi_GridCellHisto(int);
62 ~visi_GridCellHisto(){delete[] value;}
63 int LastBucketFilled(){return(lastBucketFilled);}
64 float *Value(){ return(value);}
66 if((i < 0) || (i > size)){
71 int Size(){return(size);}
72 int Valid(){return(valid);}
73 void Invalidate(){delete[] value; value = NULL; size = 0; valid = 0; lastBucketFilled = -1;}
74 void Fold(int method){
77 for(i=0,j=0;(i< (size/2)) && (j< (size-1)); i++,j+=2){
78 if((value[j] != ERROR) && (value[j+1] != ERROR))
79 value[i] = value[j] + value[j+1];
82 if((method == AVE) && (value[i] != ERROR))
83 value[i] = value[i]/2;
85 for(i=(size/2); i < size; i++){
88 lastBucketFilled = (size/2)-1;
91 float AggregateValue(int method){
95 for(sum=0.0,num=i=0; i< size; i++){
96 if(value[i] != ERROR){
104 return(sum/(1.0*num));
107 visi_ErrorHandler(ERROR_AGGREGATE,"divide by zero");
108 return(ERROR_AGGREGATE);
112 visi_ErrorHandler(ERROR_AGGREGATE,"values == NULL");
113 return(ERROR_AGGREGATE);
116 int AddValue(float x,int i,int numElements){
117 /* if this is the first value create a histo cell array */
121 value = new float[numElements];
128 if((i < 0) || (i >= size))
129 return(ERROR_SUBSCRIPT);
131 if(i > lastBucketFilled)
132 lastBucketFilled = i;
136 float operator[](int i){
137 if((i >= size) || (i < 0)){
138 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in [] operator in histogridcell");
146 class visi_GridHistoArray {
148 visi_GridCellHisto *values;
151 visi_GridHistoArray(){values = NULL; size = 0;}
152 visi_GridHistoArray(int);
153 ~visi_GridHistoArray();
154 int LastBucketFilled(int resource){
155 if((resource < 0) || (resource >= size))
156 return(ERROR_SUBSCRIPT);
158 return(values[resource].LastBucketFilled());
160 int AddValue(float x,int resource,int bucketNum,int numBuckets){
161 if((resource < 0) || (resource >= size))
162 return(ERROR_SUBSCRIPT);
163 return(values[resource].AddValue(x,bucketNum,numBuckets));
165 visi_GridCellHisto *Value(){return(values);}
168 int AddNewResources(int,int);
169 void Fold(int method){
171 for(i=0; i< size; i++)
172 values[i].Fold(method);
174 float AggregateValue(int i,int method){
176 return(values[i].AggregateValue(method));
180 visi_GridCellHisto& operator[](int i){
181 if ((i>= 0) && (i < size)){
185 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in [] operator GridHistoArray");
191 class visi_DataGrid {
199 visi_GridHistoArray *data_values;
201 visi_DataGrid(){metrics=NULL; resources=NULL; numMetrics=numResources=0;
202 data_values=NULL; numBins= 0; binWidth=0.0;}
203 visi_DataGrid(int,int,Metric *,Resource *,int,double);
204 visi_DataGrid(int,int,metricType *,resourceType *,int,double);
205 virtual ~visi_DataGrid();
206 char *MetricName(int i);
207 char *MetricUnits(int i);
208 char *ResourceName(int j);
211 int NumMetrics(){return(numMetrics);}
213 int NumResources(){return(numResources);}
214 int MetricId(int); // returns metric Id
215 int ResourceId(int); // returns Resource Id
216 int NumBins(){return(numBins);}
217 double BinWidth(){return(binWidth);}
219 int Invalidate(int,int);
220 float AggregateValue(int i,int j){
221 if((i>=0)&&(i<numMetrics))
222 return(data_values[i].AggregateValue(j,metrics[i].Aggregate()));
226 void Fold(double width){
228 for(i=0; i < numMetrics; i++)
229 data_values[i].Fold(metrics[i].Aggregate());
232 int AddValue(int metric, int resource, int bucket,float value){
233 if((metric < 0) || (metric >= numMetrics))
234 return(ERROR_SUBSCRIPT);
235 return(data_values[metric].AddValue(value,resource,bucket,numBins));
237 visi_GridHistoArray& operator[](int i){
238 if((i < 0) || (i >= numMetrics)){
239 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in [] operator DATAGRID");
240 return(data_values[0]);
242 return(data_values[i]);
244 int LastBucketFilled(int metric,int resource){
245 if((metric < 0) || (metric >= numMetrics))
246 return(ERROR_SUBSCRIPT);
247 return(data_values[metric].LastBucketFilled(resource));