1 /* $Log: datagrid.h,v $
2 /* Revision 1.5 1994/04/13 21:22:51 newhall
3 /* *** empty log message ***
5 * Revision 1.4 1994/03/26 04:17:44 newhall
6 * change all floats to double
8 * Revision 1.3 1994/03/17 05:17:25 newhall
9 * added lastBucketFilled data member to class visi_GridCellHisto: value of
10 * the largest bucket number for which new data values have been added
12 * Revision 1.2 1994/03/15 02:03:19 newhall
13 * added public member "userdata" to class visi_GridCellHisto
14 * to allow visi writer to add info to grid cells
16 * Revision 1.1 1994/03/14 20:27:26 newhall
17 * changed visi subdirectory structure
31 char *units; // how units are measured i.e. "ms"
32 char *name; // for y-axis labeling
33 int Id; // unique metric Id
34 int aggregate; //either SUM or AVE, for fold operation
36 Metric(){units = NULL; name = NULL; Id = NOVALUE; aggregate=SUM;}
37 Metric(char* ,char*,int,int);
38 ~Metric(){delete[] units;delete[] name;}
39 char *Units(){return(units);}
40 char *Name(){return(name);}
41 int Identifier(){return(Id);}
42 int Aggregate(){return(aggregate);}
47 char *name; // obj. name for graph labeling
48 int Id; // unique resource id
50 Resource(){name = NULL; Id = -1;}
52 ~Resource(){ delete[] name;}
53 char *Name(){return(name);}
54 int Identifier(){return(Id);}
58 class visi_GridCellHisto {
62 int lastBucketFilled; // bucket number of last data value added
65 void *userdata; // to allow visi writer to add info to grid cells
66 visi_GridCellHisto(){value = NULL; valid = 0; size = 0; userdata = NULL; lastBucketFilled = -1;}
67 visi_GridCellHisto(int);
68 ~visi_GridCellHisto(){delete[] value;}
69 int LastBucketFilled(){return(lastBucketFilled);}
70 double *Value(){ return(value);}
72 if((i < 0) || (i > size)){
77 int Size(){return(size);}
78 int Valid(){return(valid);}
79 void Invalidate(){delete[] value; value = NULL; size = 0; valid = 0; lastBucketFilled = -1;}
80 void Fold(int method){
83 for(i=0,j=0;(i< (size/2)) && (j< (size-1)); i++,j+=2){
84 if((value[j] != ERROR) && (value[j+1] != ERROR))
85 value[i] = value[j] + value[j+1];
88 if((method == AVE) && (value[i] != ERROR))
89 value[i] = value[i]/2;
91 for(i=(size/2); i < size; i++){
94 lastBucketFilled = (size/2)-1;
97 double AggregateValue(int method){
101 for(sum=0.0,num=i=0; i< size; i++){
102 if(value[i] != ERROR){
110 return(sum/(1.0*num));
113 visi_ErrorHandler(ERROR_AGGREGATE,"divide by zero");
114 return(ERROR_AGGREGATE);
118 visi_ErrorHandler(ERROR_AGGREGATE,"values == NULL");
119 return(ERROR_AGGREGATE);
122 int AddValue(double x,int i,int numElements){
123 /* if this is the first value create a histo cell array */
127 value = new double[numElements];
134 if((i < 0) || (i >= size))
135 return(ERROR_SUBSCRIPT);
137 if(i > lastBucketFilled)
138 lastBucketFilled = i;
142 double operator[](int i){
143 if((i >= size) || (i < 0)){
144 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in [] operator in histogridcell");
152 class visi_GridHistoArray {
154 visi_GridCellHisto *values;
157 visi_GridHistoArray(){values = NULL; size = 0;}
158 visi_GridHistoArray(int);
159 ~visi_GridHistoArray();
160 int LastBucketFilled(int resource){
161 if((resource < 0) || (resource >= size))
162 return(ERROR_SUBSCRIPT);
164 return(values[resource].LastBucketFilled());
166 int AddValue(double x,int resource,int bucketNum,int numBuckets){
167 if((resource < 0) || (resource >= size))
168 return(ERROR_SUBSCRIPT);
169 return(values[resource].AddValue(x,bucketNum,numBuckets));
171 visi_GridCellHisto *Value(){return(values);}
174 int AddNewResources(int,int);
175 void Fold(int method){
177 for(i=0; i< size; i++)
178 values[i].Fold(method);
180 double AggregateValue(int i,int method){
182 return(values[i].AggregateValue(method));
186 visi_GridCellHisto& operator[](int i){
187 if ((i>= 0) && (i < size)){
191 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in [] operator GridHistoArray");
197 class visi_DataGrid {
205 visi_GridHistoArray *data_values;
207 visi_DataGrid(){metrics=NULL; resources=NULL; numMetrics=numResources=0;
208 data_values=NULL; numBins= 0; binWidth=0.0;}
209 visi_DataGrid(int,int,Metric *,Resource *,int,double);
210 visi_DataGrid(int,int,metricType *,resourceType *,int,double);
211 virtual ~visi_DataGrid();
212 char *MetricName(int i);
213 char *MetricUnits(int i);
214 char *ResourceName(int j);
217 int NumMetrics(){return(numMetrics);}
219 int NumResources(){return(numResources);}
220 int MetricId(int); // returns metric Id
221 int ResourceId(int); // returns Resource Id
222 int NumBins(){return(numBins);}
223 double BinWidth(){return(binWidth);}
225 int Invalidate(int,int);
226 double AggregateValue(int i,int j){
227 if((i>=0)&&(i<numMetrics))
228 return(data_values[i].AggregateValue(j,metrics[i].Aggregate()));
232 void Fold(double width){
234 for(i=0; i < numMetrics; i++)
235 data_values[i].Fold(metrics[i].Aggregate());
238 int AddValue(int metric, int resource, int bucket,double value){
239 if((metric < 0) || (metric >= numMetrics))
240 return(ERROR_SUBSCRIPT);
241 return(data_values[metric].AddValue(value,resource,bucket,numBins));
243 visi_GridHistoArray& operator[](int i){
244 if((i < 0) || (i >= numMetrics)){
245 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in [] operator DATAGRID");
246 return(data_values[0]);
248 return(data_values[i]);
250 int LastBucketFilled(int metric,int resource){
251 if((metric < 0) || (metric >= numMetrics))
252 return(ERROR_SUBSCRIPT);
253 return(data_values[metric].LastBucketFilled(resource));