Modified to support machines which do not have NaN(x).
[dyninst.git] / visi / h / visiTypes.h
1 #ifndef _visiTypes_h
2 #define _visiTypes_h
3 /*
4  * Copyright (c) 1993, 1994 Barton P. Miller, Jeff Hollingsworth,
5  *     Bruce Irvin, Jon Cargille, Krishna Kunchithapadam, Karen
6  *     Karavanic, Tia Newhall, Mark Callaghan.  All rights reserved.
7  * 
8  * This software is furnished under the condition that it may not be
9  * provided or otherwise made available to, or used by, any other
10  * person, except as provided for by the terms of applicable license
11  * agreements.  No title to or ownership of the software is hereby
12  * transferred.  The name of the principals may not be used in any
13  * advertising or publicity related to this software without specific,
14  * written prior authorization.  Any use of this software must include
15  * the above copyright notice.
16  *
17  */
18 /* $Log: visiTypes.h,v $
19 /* Revision 1.8  1995/02/16 09:32:05  markc
20 /* Modified to support machines which do not have NaN(x).
21 /* This code has not been tested, but it compiles.
22 /*
23  * Revision 1.7  1994/09/25  01:58:15  newhall
24  * changed interface definitions to work for new version of igen
25  * changed AddMetricsResources def. to take array of metric/focus pairs
26  *
27  * Revision 1.6  1994/08/03  20:57:03  newhall
28  * *** empty log message ***
29  *
30  * Revision 1.5  1994/08/03  20:47:46  newhall
31  * removed event type NEWMETRICSRESOURCES
32  *
33  * Revision 1.4  1994/07/30  03:26:56  newhall
34  * added new msgTag type ENABLED
35  *
36  * Revision 1.3  1994/07/28  22:23:19  krisna
37  * changed definition of ERROR to use NaN(X)
38  *
39  * Revision 1.2  1994/05/23  20:55:19  newhall
40  * To visi_GridCellHisto class: added deleted flag, SumValue
41  * method function, and fixed AggregateValue method function
42  *
43  * Revision 1.1  1994/05/11  17:11:08  newhall
44  * changed data values from double to float
45  * */
46
47 #include <stdio.h>
48 #include <math.h>
49 // TODO -- nan.h is a non-standard header file -- there has to be a portable
50 // way to do this -- mdc -- I am not sure if this works, but it compiles
51 #if !defined(i386_unknown_netbsd1_0) && !defined(hppa1_1_hp_hpux)
52 #include <nan.h>
53 #endif /* !defined(i386_unknown_netbsd1_0) */
54
55 #define INVALID            0
56 #define VALID              1
57 #define NOVALUE           -1
58 #define OK                 0
59 #define VISI_ERROR_BASE   -19
60 #define ERROR_REALLOC     -20
61 #define ERROR_CREATEGRID  -21
62 #define ERROR_SUBSCRIPT   -22
63 #define ERROR_AGGREGATE   -23
64 #define ERROR_NOELM       -24
65 #define ERROR_MALLOC      -25
66 #define ERROR_STRNCPY     -26
67 #define ERROR_INIT        -27
68 #define VISI_ERROR_MAX    -27
69
70 static double visi_nan = 0;
71 static float f_visi_nan = 0;
72 static nan_created = false;
73 // TODO -- NaN is a non standard macro -- it is not portable
74 // TODO -- should a float or a double be used here
75 #if !defined(i386_unknown_netbsd1_0) && !defined(hppa1_1_hp_hpux)
76 #define ERROR (NaN(visi_nan),visi_nan)
77 #else
78 #include <assert.h>
79 inline float make_ERROR() {
80   if (!nan_created) {
81     visi_nan = sqrt(-3);
82     f_visi_nan = sqrt(-3);
83     nan_created = true;
84   }
85   assert(isnan(f_visi_nan));
86   assert(isnan(visi_nan));
87   return f_visi_nan;
88 }
89 #define ERROR make_ERROR()
90 #endif
91
92 //
93 // event types associated with events from Paradyn to a visualization
94 // DATAVALUES:  a new set of data has arrived in the datagrid
95 // INVALIDMETRICSRESOURCES:  a metric resource combination has become invalid
96 // ADDMETRICSRESOURCES:  new metrics have become enabled for a resource
97 // PHASENAME:  a new phase has been defined
98 // FOLD:  the histogram has folded; binWidth has doubled
99 //
100 typedef enum {DATAVALUES,INVALIDMETRICSRESOURCES,ADDMETRICSRESOURCES,
101               PHASENAME,FOLD} msgTag;
102
103
104 typedef float sampleType;
105 typedef double timeType;
106
107 struct metricStruct {
108      char *units;    // how units are measured
109      char *name;     // metric name for graph labeling  
110      int     Id;       // unique metric Id
111      int     aggregate;  //either SUM or AVE
112 };
113 typedef struct metricStruct visi_metricType;
114
115
116 struct resourceStruct{
117      char *name;     // resource name for graph labeling
118      int    Id;       // unique resource id
119 };
120 typedef struct resourceStruct visi_resourceType;
121
122
123 struct dataValueStruct{
124      int   metricId;
125      int   resourceId;
126      int   bucketNum;
127      sampleType data;
128 };
129 typedef struct dataValueStruct visi_dataValue;
130
131 extern void visi_ErrorHandler(int errno,const char *msg);
132
133 #endif