1 /* $Log: datagrid.h,v $
2 /* Revision 1.4 1994/03/26 04:17:44 newhall
3 /* change all floats to double
5 * Revision 1.3 1994/03/17 05:17:25 newhall
6 * added lastBucketFilled data member to class visi_GridCellHisto: value of
7 * the largest bucket number for which new data values have been added
9 * Revision 1.2 1994/03/15 02:03:19 newhall
10 * added public member "userdata" to class visi_GridCellHisto
11 * to allow visi writer to add info to grid cells
13 * Revision 1.1 1994/03/14 20:27:26 newhall
14 * changed visi subdirectory structure
28 char *units; // how units are measured i.e. "ms"
29 char *name; // for y-axis labeling
30 int Id; // unique metric Id
31 int aggregate; //either SUM or AVE, for fold operation
33 Metric(){units = NULL; name = NULL; Id = NOVALUE; aggregate=SUM;}
34 Metric(char* ,char*,int,int);
35 ~Metric(){delete[] units;delete[] name;}
36 char *Units(){return(units);}
37 char *Name(){return(name);}
38 int Identifier(){return(Id);}
39 int Aggregate(){return(aggregate);}
44 char *name; // obj. name for graph labeling
45 int Id; // unique resource id
47 Resource(){name = NULL; Id = -1;}
49 ~Resource(){ delete[] name;}
50 char *Name(){return(name);}
51 int Identifier(){return(Id);}
55 class visi_GridCellHisto {
59 int lastBucketFilled; // bucket number of last data value added
62 void *userdata; // to allow visi writer to add info to grid cells
63 visi_GridCellHisto(){value = NULL; valid = 0; size = 0; userdata = NULL; lastBucketFilled = -1;}
64 visi_GridCellHisto(int);
65 ~visi_GridCellHisto(){delete[] value;}
66 int LastBucketFilled(){return(lastBucketFilled);}
67 double *Value(){ return(value);}
69 if((i < 0) || (i > size)){
74 int Size(){return(size);}
75 int Valid(){return(valid);}
76 void Invalidate(){delete[] value; value = NULL; size = 0; valid = 0; lastBucketFilled = -1;}
77 void Fold(int method){
80 for(i=0,j=0;(i< (size/2)) && (j< (size-1)); i++,j+=2){
81 if((value[j] != ERROR) && (value[j+1] != ERROR))
82 value[i] = value[j] + value[j+1];
85 if((method == AVE) && (value[i] != ERROR))
86 value[i] = value[i]/2;
88 for(i=(size/2); i < size; i++){
91 lastBucketFilled = (size/2)-1;
94 double AggregateValue(int method){
98 for(sum=0.0,num=i=0; i< size; i++){
99 if(value[i] != ERROR){
107 return(sum/(1.0*num));
110 visi_ErrorHandler(ERROR_AGGREGATE,"divide by zero");
111 return(ERROR_AGGREGATE);
115 visi_ErrorHandler(ERROR_AGGREGATE,"values == NULL");
116 return(ERROR_AGGREGATE);
119 int AddValue(double x,int i,int numElements){
120 /* if this is the first value create a histo cell array */
124 value = new double[numElements];
131 if((i < 0) || (i >= size))
132 return(ERROR_SUBSCRIPT);
134 if(i > lastBucketFilled)
135 lastBucketFilled = i;
139 double operator[](int i){
140 if((i >= size) || (i < 0)){
141 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in [] operator in histogridcell");
149 class visi_GridHistoArray {
151 visi_GridCellHisto *values;
154 visi_GridHistoArray(){values = NULL; size = 0;}
155 visi_GridHistoArray(int);
156 ~visi_GridHistoArray();
157 int LastBucketFilled(int resource){
158 if((resource < 0) || (resource >= size))
159 return(ERROR_SUBSCRIPT);
161 return(values[resource].LastBucketFilled());
163 int AddValue(double x,int resource,int bucketNum,int numBuckets){
164 if((resource < 0) || (resource >= size))
165 return(ERROR_SUBSCRIPT);
166 return(values[resource].AddValue(x,bucketNum,numBuckets));
168 visi_GridCellHisto *Value(){return(values);}
171 int AddNewResources(int,int);
172 void Fold(int method){
174 for(i=0; i< size; i++)
175 values[i].Fold(method);
177 double AggregateValue(int i,int method){
179 return(values[i].AggregateValue(method));
183 visi_GridCellHisto& operator[](int i){
184 if ((i>= 0) && (i < size)){
188 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in [] operator GridHistoArray");
194 class visi_DataGrid {
202 visi_GridHistoArray *data_values;
204 visi_DataGrid(){metrics=NULL; resources=NULL; numMetrics=numResources=0;
205 data_values=NULL; numBins= 0; binWidth=0.0;}
206 visi_DataGrid(int,int,Metric *,Resource *,int,double);
207 visi_DataGrid(int,int,metricType *,resourceType *,int,double);
208 virtual ~visi_DataGrid();
209 char *MetricName(int i);
210 char *MetricUnits(int i);
211 char *ResourceName(int j);
214 int NumMetrics(){return(numMetrics);}
216 int NumResources(){return(numResources);}
217 int MetricId(int); // returns metric Id
218 int ResourceId(int); // returns Resource Id
219 int NumBins(){return(numBins);}
220 double BinWidth(){return(binWidth);}
222 int Invalidate(int,int);
223 double AggregateValue(int i,int j){
224 if((i>=0)&&(i<numMetrics))
225 return(data_values[i].AggregateValue(j,metrics[i].Aggregate()));
229 void Fold(double width){
231 for(i=0; i < numMetrics; i++)
232 data_values[i].Fold(metrics[i].Aggregate());
235 int AddValue(int metric, int resource, int bucket,double value){
236 if((metric < 0) || (metric >= numMetrics))
237 return(ERROR_SUBSCRIPT);
238 return(data_values[metric].AddValue(value,resource,bucket,numBins));
240 visi_GridHistoArray& operator[](int i){
241 if((i < 0) || (i >= numMetrics)){
242 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in [] operator DATAGRID");
243 return(data_values[0]);
245 return(data_values[i]);
247 int LastBucketFilled(int metric,int resource){
248 if((metric < 0) || (metric >= numMetrics))
249 return(ERROR_SUBSCRIPT);
250 return(data_values[metric].LastBucketFilled(resource));