CARMA C++
SubsystemFrameHeader.h
1 #ifndef CARMA_MONITOR_SUBSYSTEMFRAMEHEADER_H
2 #define CARMA_MONITOR_SUBSYSTEMFRAMEHEADER_H
3 
4 namespace carma {
5 namespace monitor {
6 
12  unsigned short subsystemID; // first header field
13  unsigned short statusFlags;
14  int numMonitorPoints;
15  int numSingleSamplePoints;
16  int numSamples;
17  int numActualSamples;
18  int maxMonitorPoints; // maximum # of monitor points
19  int maxSamples; // maximum number of monitor samples
20  int frameCount; // timestamp for current subsystem frame
21  double lastWriterDelay;
22  // delay and write time for the last client to write
23  // monitor point values to the Scriber; if
24  // delay is -1, or zero, then write was manual,
25  // not using autoWriter
26  double lastWriteTime;
27  double scriberWriteDelay;
28  double scriberWriteTime;
29  double publishTime;
30  double receiveTime; // final header field
31 
32  int obsolete1;
33  int obsolete2;
34  int obsolete3;
35 }; // 92 bytes
36 
37 
38 struct SubsystemDataPointers {
39  public:
40  explicit SubsystemDataPointers( );
41  explicit SubsystemDataPointers( SubsystemHeader & frame );
42 
43  /* virtual */ ~SubsystemDataPointers();
44 
45  void swap( SubsystemDataPointers & rhs );
46 
47  bool operator==( const SubsystemDataPointers & rhs ) const;
48  bool operator!=( const SubsystemDataPointers & rhs ) const;
49 
50  void syncSubsystemDataPointersToNewFrameData( SubsystemHeader & frame );
51 
52  // maxMonitorPoints number of indices
53  int * writableMonitorPointIndex;
54  const int * monitorPointIndex;
55 
56  // maxMonitorPoints number of headers
57  MonitorHeader * writableMonitorHeaders;
58  const MonitorHeader * monitorHeaders;
59 
60  // maxSamples number of monitor samples
61  MonitorSampleValue * writableMonitorValues;
62  const MonitorSampleValue * monitorValues;
63 };
64 
65 
66 } // namespace carma::monitor
67 } // namespace carma
68 
69 
70 inline
71 carma::monitor::SubsystemDataPointers::SubsystemDataPointers( ) :
72 writableMonitorPointIndex( 0 ),
73 monitorPointIndex( 0 ),
74 writableMonitorHeaders( 0 ),
75 monitorHeaders( 0 ),
76 writableMonitorValues( 0 ),
77 monitorValues( 0 )
78 {
79 }
80 
81 
82 inline
83 carma::monitor::SubsystemDataPointers::~SubsystemDataPointers( )
84 {
85  writableMonitorPointIndex = 0;
86  monitorPointIndex = 0;
87  writableMonitorHeaders = 0;
88  monitorHeaders = 0;
89  writableMonitorValues = 0;
90  monitorValues = 0;
91 }
92 
93 
94 inline void
95 carma::monitor::SubsystemDataPointers::swap( SubsystemDataPointers & rhs )
96 {
97  ::std::swap( writableMonitorPointIndex, rhs.writableMonitorPointIndex );
98  ::std::swap( monitorPointIndex, rhs.monitorPointIndex );
99  ::std::swap( writableMonitorHeaders, rhs.writableMonitorHeaders );
100  ::std::swap( monitorHeaders, rhs.monitorHeaders );
101  ::std::swap( writableMonitorValues, rhs.writableMonitorValues );
102  ::std::swap( monitorValues, rhs.monitorValues );
103 }
104 
105 
106 inline bool
107 carma::monitor::SubsystemDataPointers::operator==(
108  const SubsystemDataPointers & rhs ) const
109 {
110  return ((writableMonitorPointIndex == rhs.writableMonitorPointIndex) &&
111  (monitorPointIndex == rhs.monitorPointIndex) &&
112  (writableMonitorHeaders == rhs.writableMonitorHeaders) &&
113  (monitorHeaders == rhs.monitorHeaders) &&
114  (writableMonitorValues == rhs.writableMonitorValues) &&
115  (monitorValues == rhs.monitorValues));
116 }
117 
118 
119 inline bool
120 carma::monitor::SubsystemDataPointers::operator!=(
121  const SubsystemDataPointers & rhs ) const
122 {
123  return (operator==( rhs ) == false);
124 }
125 
126 
127 #endif
Structure for storing monitor point sample, including value.
Structure used to manage memory for a subsystem frame.