added operator= to sampleInfo to remove purify umr hits
[dyninst.git] / pdutil / h / aggregateSample.h
1
2 //
3 // Define a class for a sample value.
4 //    Sample values can be a single value or may be the result of an aggregate.
5 //    This is in the util library because both paradynd's and paradyn need to
6 //      use it.
7 //
8
9 #ifndef UTIL_SAMPLE
10 #define UTIL_SAMPLE
11
12 #include "util/h/list.h"
13 #include "util/h/hist.h"
14 #include "util/h/Vector.h"
15 #include "util/h/aggregation.h"
16
17 //
18 // What gets returned when a newValue is called in sampleInfo;
19 struct sampleInterval {
20     bool valid;
21     timeStamp   start;
22     timeStamp   end;
23     sampleValue value;
24 };
25
26 class sampleInfo {
27   public:
28  
29     bool firstValueReceived() { return firstSampleReceived; }
30
31     struct sampleInterval startTime(timeStamp startTime_);
32
33     struct sampleInterval firstValue(timeStamp startTime, timeStamp endTime, 
34                                      sampleValue value);
35
36     struct sampleInterval newValue(timeStamp wallTime, sampleValue value);
37
38     //struct sampleInterval newValue(List<sampleInfo *> peers, 
39     //                             timeStamp wallTime, 
40     //                             sampleValue value);
41     struct sampleInterval newValue(vector<sampleInfo *> peers, 
42                                    timeStamp wallTime, 
43                                    sampleValue value);
44     struct sampleInterval newValue(vector<sampleInfo *> &parts, 
45                                    vector<unsigned> &weight_of_part,
46                                    timeStamp wallTime, 
47                                    sampleValue value);
48     sampleInfo( int aOp = aggSum) {
49         firstSampleReceived = false;
50         value = 0.0;
51         lastSampleStart = 0.0;
52         lastSampleEnd = 0.0;
53         lastSample = 0.0;
54         aggOp = aOp;
55         nparts = 0;
56     }
57     sampleInfo &operator=(const sampleInfo &src) {
58        firstSampleReceived = src.firstSampleReceived;
59        value = src.value;
60        lastSampleStart = src.lastSampleStart;
61        lastSampleEnd = src.lastSampleEnd;
62        lastSample = src.lastSample;
63        aggOp = src.aggOp;
64        nparts = src.nparts;
65        return *this;
66     }
67     bool firstSampleReceived;        // has first sample been recorded
68     sampleValue value;                  // cumlative value
69     timeStamp   lastSampleStart;        // start time for last sample
70     timeStamp   lastSampleEnd;          // end time for last sample
71     sampleValue lastSample;             // what was the last sample increment
72     int aggOp;
73
74 private:
75
76     unsigned nparts;                    // number of parts for an aggregate value
77
78 };
79
80 #endif