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