changed bucket width and time value's type to double
[dyninst.git] / visi / src / datagrid.C
1 /* $Log: datagrid.C,v $
2 /* Revision 1.3  1994/03/17 05:19:59  newhall
3 /* changed bucket width and time value's type to double
4 /*
5  * Revision 1.2  1994/03/14  20:28:44  newhall
6  * changed visi subdirectory structure
7  *  */ 
8 #include "visi/h/datagrid.h" 
9
10 Metric::Metric(char *metricUnits,char *metricName,int id,int foldMethod){
11   units = new char[strlen(metricUnits) + 1];
12   strcpy(units,metricUnits);
13   name  = new char[strlen(metricName) + 1];
14   strcpy(name,metricName);
15   Id    = id;
16   if(foldMethod == AVE)
17     aggregate = foldMethod;
18   else
19     aggregate = SUM;
20 }
21
22 ///////////////////////////////////////////
23 /*
24  *  Resource constructor
25  */
26 Resource::Resource(char *resourceName,int id){
27
28   if(resourceName != NULL){
29    name = new char[strlen(resourceName) + 1];
30    strcpy(name,resourceName);
31    Id = id;
32   }
33   else {
34    name = new char[1];
35     name[0] = '\0';
36     Id = -1;
37   }
38 }
39
40
41 ///////////////////////////////////////////
42 visi_GridCellHisto::visi_GridCellHisto(int numElements){
43
44  int i;
45     
46  if(numElements > 0){  
47    value = new float[numElements];
48    for(i = 0; i < numElements; i++)
49      value[i] = ERROR;
50    valid      = 1;
51  }
52  userdata = NULL;
53  size       = numElements;
54  lastBucketFilled = -1;
55 }
56
57 ///////////////////////////////////////////
58 /*
59  * constructor for class GridHistoArray
60  */
61 visi_GridHistoArray::visi_GridHistoArray(int numElements){
62
63  if(numElements > 0){  
64    values = new visi_GridCellHisto[numElements];
65  }
66  size = numElements;
67
68 }
69
70
71 /*
72  * destructor for class GridHistoArray
73  */
74 visi_GridHistoArray::~visi_GridHistoArray(){
75
76   delete[] values;
77 }
78
79 /*
80  *
81  */
82 int visi_GridHistoArray::Valid(int i){
83
84   if ((i< 0) || (i>= size)){
85     visi_ErrorHandler(ERROR_SUBSCRIPT,"visi_GridHistoArray::Valid");
86     return(ERROR_SUBSCRIPT);  
87   }
88   return(values[i].Valid());
89
90 }
91
92
93 /*
94  *
95  */
96 int visi_GridHistoArray::Invalidate(int i){
97
98   if ((i< 0) || (i>= size)){
99     visi_ErrorHandler(ERROR_SUBSCRIPT,"visi_GridHistoArray::Invalidate");
100     return(ERROR_SUBSCRIPT);  
101   }
102   values[i].Invalidate();
103   return(OK);
104 }
105
106
107
108 ///////////////////////////////////////////
109 /*
110  * DataGrid constructor
111  */
112 visi_DataGrid::visi_DataGrid(int noMetrics,int noResources,Metric *metricList,
113              Resource *resourceList,int noBins,double width){
114 int i;
115
116   numMetrics   = noMetrics;
117   numResources = noResources;
118   metrics      = new Metric[noMetrics];
119   resources    = new Resource[noResources];
120
121   for(i = 0; i < noMetrics; i++){
122     metrics[i].Metric(metricList[i].Units(),metricList[i].Name(),
123                       metricList[i].Identifier(),metricList[i].Aggregate());
124   }
125   for(i = 0; i < noResources; i++){
126     resources[i].Resource(resourceList[i].Name(),resourceList[i].Identifier());
127   }
128
129   data_values = new visi_GridHistoArray[noMetrics];
130   for (i = 0; i < noMetrics; i++)
131     data_values[i].visi_GridHistoArray(noResources);
132   numBins  = noBins;
133   binWidth = width;
134
135 }
136
137
138 /*
139  * DataGrid constructor
140  */
141 visi_DataGrid::visi_DataGrid(int noMetrics,int noResources,metricType *metricList,resourceType *resourceList,int noBins,double width){
142 int i;
143
144   numMetrics   = noMetrics;
145   numResources = noResources;
146   metrics      = new Metric[noMetrics];
147   resources    = new Resource[noResources];
148
149   for(i = 0; i < noMetrics; i++){
150     metrics[i].Metric(metricList[i].units,metricList[i].name,
151                       metricList[i].Id,metricList[i].aggregate);
152   }
153   for(i = 0; i < noResources; i++){
154     resources[i].Resource(resourceList[i].name,resourceList[i].Id);
155   }
156   data_values = new visi_GridHistoArray[noMetrics];
157   for (i = 0; i < noMetrics; i++)
158     data_values[i].visi_GridHistoArray(noResources);
159   numBins  = noBins;
160   binWidth = width;
161
162 }
163
164
165
166
167
168
169 /*
170  *  DataGrid destructor 
171  */
172 visi_DataGrid::~visi_DataGrid(){
173
174   delete[] resources;
175   delete[] metrics;
176   delete[] data_values;
177 }
178
179 /* 
180  * returns metric name for metric number i 
181  */
182 char   *visi_DataGrid::MetricName(int i){
183   if((i < numMetrics) && (i>=0))
184     return(metrics[i].Name());
185   return(NULL);
186 }
187
188 /* 
189  * returns metric units for metric number i 
190  */
191 char *visi_DataGrid::MetricUnits(int i){
192
193   if((i < numMetrics) && (i>=0))
194     return(metrics[i].Units());
195   return(NULL);
196 }
197
198
199 /* 
200  * returns resource name for resource number j 
201  */
202 char     *visi_DataGrid::ResourceName(int j){
203
204   if((j < numResources) && (j>0))
205     return(resources[j].Name());
206   return(NULL);
207 }
208
209 /* 
210  * returns list of metrics for current visualization 
211  */
212 char  *visi_DataGrid::MetricList(){
213
214   return(NULL);
215 }
216
217 /* 
218  * returns list of objects for current visualization 
219  */
220 char  *visi_DataGrid::ObjectList(){
221
222   return(NULL);
223 }
224
225 /* 
226  *  returns fold method for metric i 
227  */
228 int  visi_DataGrid::FoldMethod(int i){
229
230   if((i < numMetrics) && (i >= 0))
231     return(metrics[i].Aggregate());
232   visi_ErrorHandler(ERROR_SUBSCRIPT,"visi_DataGrid::FoldMethod");
233   return(ERROR_SUBSCRIPT);
234
235 }
236
237 /* 
238  * returns metric identifier associated with metric number i 
239  */
240 int  visi_DataGrid::MetricId(int i){
241
242   if((i < numMetrics) && (i >= 0))
243     return(metrics[i].Identifier());
244   visi_ErrorHandler(ERROR_SUBSCRIPT,"visi_DataGrid::MetricId");
245   return(ERROR_SUBSCRIPT);
246 }
247
248 /* 
249  * returns resource identifier associated with resource number j 
250  */
251 int  visi_DataGrid::ResourceId(int j){
252
253   if((j < numResources) && (j >= 0))
254     return(resources[j].Identifier());
255   visi_ErrorHandler(ERROR_SUBSCRIPT,"visi_DataGrid::ResourceId");
256   return(ERROR_SUBSCRIPT);
257 }
258
259 /*
260  * returns 1 if datagrid element indicated by metric#, resource#
261  * contains histogram values, otherwise returns false
262  */
263 int visi_DataGrid::Valid(int metric,int resource){
264
265   if((metric < 0) || (metric >= numMetrics)){
266     visi_ErrorHandler(ERROR_SUBSCRIPT,"visi_HistoDataGrid::Valid");
267     return(ERROR_SUBSCRIPT);
268   }
269   return(data_values[metric].Valid(resource));
270
271 }
272
273 /*
274  * invalidates data_grid element indicated by metric#, resource#
275  * sets valid to 0 and frees histogram space 
276  */
277 int visi_DataGrid::Invalidate(int metric,int resource){
278
279   if((metric < 0) || (metric >= numMetrics)){
280     visi_ErrorHandler(ERROR_SUBSCRIPT,"visi_HistoDataGrid::Invalidate");
281     return(ERROR_SUBSCRIPT);
282   }
283   return(data_values[metric].Invalidate(resource));
284
285 }
286