CARMA C++
AverageAccumulator.h
Go to the documentation of this file.
1 /*
2  * AverageAccumulator.h - Class definition for accumulating monitor point
3  * values of various types.
4  */
5 
6 #ifndef CARMA_MONITOR_AVERAGE_ACCUMULATOR_H
7 #define CARMA_MONITOR_AVERAGE_ACCUMULATOR_H
8 
22 #include <map>
23 
26 #include "carma/dbms/dbFFIO.h"
27 
28 
29 namespace carma {
30 namespace monitor {
31 
32 
33 typedef TypedAverageAccumulatorT< MonitorPointChar, double > CharAccumulator;
34 typedef TypedAverageAccumulatorT< MonitorPointByte, double > ByteAccumulator;
35 typedef TypedAverageAccumulatorT< MonitorPointShort, double > ShortAccumulator;
36 typedef TypedAverageAccumulatorT< MonitorPointInt, double > IntAccumulator;
37 typedef TypedAverageAccumulatorT< MonitorPointBool, long > BoolAccumulator;
38 typedef TypedAverageAccumulatorT< MonitorPointEnum, int > EnumAccumulator;
39 typedef TypedAverageAccumulatorT< MonitorPointFloat, double > FloatAccumulator;
40 typedef TypedAverageAccumulatorT< MonitorPointDouble, double > DoubleAccumulator;
41 typedef TypedAverageAccumulatorT< MonitorPointComplex, ::std::complex< float > > ComplexAccumulator;
42 typedef TypedAverageAccumulatorT< MonitorPointAbstime, double > AbstimeAccumulator;
43 typedef TypedAverageAccumulatorT< MonitorPointString, ::std::string > StringAccumulator;
44 typedef TypedAverageAccumulatorT< MonitorPointSerialNo, long > SerialNoAccumulator;
45 
46 
47 typedef enum {
48  MONITOR_DB_TYPE_NUMERIC,
49  MONITOR_DB_TYPE_SHORT,
50  MONITOR_DB_TYPE_STRING,
51  MONITOR_DB_TYPE_COMPLEX,
52  // Always last
53  MONITOR_DB_TYPE_NUM_TYPES
54 } DBwriteType;
55 
56 
86 class AverageAccumulator {
87  private:
88  // frameCount when last accumulate() was performed.
89  long frameCount_;
90  MonitorSystem& monitorSystem_;
91 
92  CharAccumulator& aveCharAccumulator_;
93  ByteAccumulator& aveByteAccumulator_;
94  ShortAccumulator& aveShortAccumulator_;
95  IntAccumulator& aveIntAccumulator_;
96  BoolAccumulator& aveBoolAccumulator_;
97  EnumAccumulator& aveEnumAccumulator_;
98  FloatAccumulator& aveFloatAccumulator_;
99  DoubleAccumulator& aveDoubleAccumulator_;
100  ComplexAccumulator& aveComplexAccumulator_;
101  AbstimeAccumulator& aveAbstimeAccumulator_;
102  StringAccumulator& aveStringAccumulator_;
103  SerialNoAccumulator& aveSerialNoAccumulator_;
104 
105  public:
106 
115  AverageAccumulator (MonitorSystem& monitorSystem,
116  const MonitorPoint::ARCHIVE_PRIORITY priority) ;
117 
123  ~AverageAccumulator () ;
124 
130  void accumulate () ;
131 
135  void resetAccumulator () ;
136 
137  void writeLongAveragesToStrings( long timestamp,
138  std::string & shortString,
139  std::string & numericString,
140  std::string & stringString,
141  std::string & complexString,
142  char * scratchString ) const;
143 
144  void writeInstAveragesToFile( long frameCount,
145  FILE * shortFile,
146  FILE * numericFile,
147  FILE * stringFile,
148  FILE * complexFile ) const;
149 
150  void writeInstAveragesToFile( long frameCount,
151  carma::dbms::dbFFIO & shortFile,
152  carma::dbms::dbFFIO & numericFile,
153  carma::dbms::dbFFIO & stringFile,
154  carma::dbms::dbFFIO & complexFile ) const;
155 
156  void dumpInstAveragesToDBFile( DBwriteType dbWriteType,
157  long frameCount,
158  FILE * file ) const;
159 
160  void dumpInstAveragesToDBFile( DBwriteType dbWriteType,
161  long frameCount,
162  carma::dbms::dbFFIO & file ) const;
163 
164  void writeLongAveragesToFile( long frameCount,
165  FILE * shortFile,
166  FILE * numericFile,
167  FILE * stringFile,
168  FILE * complexFile ) const;
169 
170 private:
171  void dumpLongAveragesToDBFile( DBwriteType dbWriteType,
172  const char * frameCountText,
173  FILE * file ) const;
174 
175 
176 
177 }; // class AverageAccumulator
178 
179 
180 } // end namespace carma::monitor
181 } // end namespace carma
182 
183 
184 #endif
ARCHIVE_PRIORITY
Archiving priority.
The monitor system base class.
Class(es) to read &amp; write dbms flat file information in ASCII or binary.