resultrecorders.h Source File¶

API: resultrecorders.h Source File
API
resultrecorders.h
1//==========================================================================
2// RESULTRECORDERS.H - part of
3// OMNeT++/OMNEST
4// Discrete System Simulation in C++
5//
6//==========================================================================
7
8/*--------------------------------------------------------------*
9 Copyright (C) 1992-2017 Andras Varga
10 Copyright (C) 2006-2017 OpenSim Ltd.
11
12 This file is distributed WITHOUT ANY WARRANTY. See the file
13 `license' for details on this and other legal matters.
14*--------------------------------------------------------------*/
15
16#ifndef __OMNETPP_RESULTRECORDERS_H
17#define __OMNETPP_RESULTRECORDERS_H
18
19#include <cmath> // INFINITY, NAN
20#include "omnetpp/cresultrecorder.h"
21#include "omnetpp/statsum_t.h"
22
23namespace omnetpp {
24
25class cStatistic;
26
31
35class SIM_API VectorRecorder : public cNumericResultRecorder
36{
37 protected:
38 void *handle; // identifies output vector for the output vector manager
39 simtime_t lastTime; // to ensure increasing timestamp order
40 double lastValue; // for getCurrentValue()
41 protected:
42 virtual void subscribedTo(cResultFilter *prev) override;
43 virtual void collect(simtime_t_cref t, double value, cObject *details) override;
44 public:
45 VectorRecorder() {handle = nullptr; lastTime = 0; lastValue = NAN;}
46 virtual ~VectorRecorder();
47 virtual simtime_t getLastWriteTime() const {return lastTime;}
48 virtual double getLastValue() const {return lastValue;}
49 virtual std::string str() const override;
50};
51
55class SIM_API TotalCountRecorder : public cResultRecorder
56{
57 protected:
58 long count;
59 protected:
60 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, bool b, cObject *details) override {count++;}
61 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, intval_t l, cObject *details) override {count++;}
62 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, uintval_t l, cObject *details) override {count++;}
63 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, double d, cObject *details) override {if (!std::isnan(d)) count++;}
64 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const SimTime& v, cObject *details) override {count++;}
65 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const char *s, cObject *details) override {if (s) count++;}
66 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, cObject *obj, cObject *details) override {if (obj) count++;}
67 virtual opp_string_map getStatisticAttributes() override;
68 virtual void finish(cResultFilter *prev) override;
69 public:
70 TotalCountRecorder() {count = 0;}
71 long getCount() const {return count;}
72 virtual std::string str() const override;
73};
74
79class SIM_API CountRecorder : public TotalCountRecorder
80{
81 protected:
82 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, double d, cObject *details) override {if (!std::isnan(d)) count++;}
83 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const char *s, cObject *details) override {if (s) count++;}
84 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, cObject *obj, cObject *details) override {if (obj) count++;}
85 public:
86 CountRecorder() {}
87};
88
92class SIM_API LastValueRecorder : public cNumericResultRecorder
93{
94 protected:
95 double lastValue;
96 protected:
97 virtual void collect(simtime_t_cref t, double value, cObject *details) override;
98 virtual void finish(cResultFilter *prev) override;
99 public:
100 LastValueRecorder() {lastValue = NAN;}
101 double getLastValue() const {return lastValue;}
102 virtual std::string str() const override;
103};
104
109class SIM_API ErrorNanRecorder : public cNumericResultRecorder
110{
111 protected:
112 virtual void collect(simtime_t_cref t, double value, cObject *details) override;
113 public:
114 ErrorNanRecorder() {}
115};
116
121class SIM_API SumRecorder : public cNumericResultRecorder
122{
123 protected:
124 statsum_t sum;
125 protected:
126 virtual void collect(simtime_t_cref t, double value, cObject *details) override;
127 virtual void finish(cResultFilter *prev) override;
128 public:
129 SumRecorder() {sum = 0;}
130 double getSum() const {return sum;}
131 virtual std::string str() const override;
132};
133
139class SIM_API MeanRecorder : public cNumericResultRecorder
140{
141 protected:
142 bool timeWeighted = false;
143 long count = 0;
144 double lastValue = NAN;
145 simtime_t lastTime = SIMTIME_ZERO;
146 statsum_t weightedSum = 0;
147 simtime_t totalTime = SIMTIME_ZERO;
148 protected:
149 virtual void init(Context *ctx) override;
150 virtual void finish(cResultFilter *prev) override;
151 public:
152 MeanRecorder() {}
153 virtual void collect(simtime_t_cref t, double value, cObject *details) override;
154 double getMean() const;
155 virtual std::string str() const override;
156};
157
162class SIM_API MinRecorder : public cNumericResultRecorder
163{
164 protected:
165 double min;
166 protected:
167 virtual void collect(simtime_t_cref t, double value, cObject *details) override;
168 virtual void finish(cResultFilter *prev) override;
169 public:
170 MinRecorder() {min = INFINITY;}
171 double getMin() const {return min;}
172 virtual std::string str() const override;
173};
174
179class SIM_API MaxRecorder : public cNumericResultRecorder
180{
181 protected:
182 double max;
183 protected:
184 virtual void collect(simtime_t_cref t, double value, cObject *details) override;
185 virtual void finish(cResultFilter *prev) override;
186 public:
187 MaxRecorder() {max = -INFINITY;}
188 double getMax() const {return max;}
189 virtual std::string str() const override;
190};
191
196class SIM_API AverageRecorder : public cNumericResultRecorder
197{
198 protected:
199 long count;
200 statsum_t sum;
201 protected:
202 virtual void collect(simtime_t_cref t, double value, cObject *details) override;
203 virtual void finish(cResultFilter *prev) override;
204 public:
205 AverageRecorder() {count = 0; sum = 0;}
206 double getAverage() const {return sum/count;}
207 virtual std::string str() const override;
208};
209
221class SIM_API TimeAverageRecorder : public cNumericResultRecorder
222{
223 protected:
224 double lastValue = NAN;
225 simtime_t lastTime = SIMTIME_ZERO;
226 statsum_t weightedSum = 0;
227 simtime_t totalTime = SIMTIME_ZERO;
228 protected:
229 virtual void collect(simtime_t_cref t, double value, cObject *details) override;
230 virtual void finish(cResultFilter *prev) override;
231 public:
232 TimeAverageRecorder() {}
233 double getTimeAverage() const;
234 virtual std::string str() const override;
235};
236
252class SIM_API RateAverageRecorder : public cNumericResultRecorder
253{
254 protected:
255 simtime_t lastTime = SIMTIME_ZERO;
256 statsum_t weightedSum = 0;
257 simtime_t totalTime = SIMTIME_ZERO;
258 protected:
259 virtual void collect(simtime_t_cref t, double value, cObject *details) override;
260 virtual void finish(cResultFilter *prev) override;
261 public:
262 RateAverageRecorder() {}
263 double getRateAverage() const;
264 virtual std::string str() const override;
265};
266
272class SIM_API StatisticsRecorder : public cNumericResultRecorder
273{
274 protected:
275 cStatistic *statistic = nullptr;
276 double lastValue = NAN;
277 simtime_t lastTime = SIMTIME_ZERO;
278 protected:
279 virtual void collect(simtime_t_cref t, double value, cObject *details) override;
280 virtual void finish(cResultFilter *prev) override;
281 virtual void forEachChild(cVisitor *v) override;
282 public:
283 StatisticsRecorder() {}
285 virtual void setStatistic(cStatistic* stat);
286 virtual cStatistic *getStatistic() const {return statistic;}
287 virtual std::string str() const override;
288};
289
290class SIM_API StatsRecorder : public StatisticsRecorder
291{
292 public:
293 virtual void init(Context *ctx) override;
294};
295
296class SIM_API HistogramRecorder : public StatisticsRecorder
297{
298 public:
299 virtual void init(Context *ctx) override;
300};
301
302class SIM_API TimeWeightedHistogramRecorder : public StatisticsRecorder
303{
304 public:
305 virtual void init(Context *ctx) override;
306};
307
308class SIM_API PSquareRecorder : public StatisticsRecorder
309{
310 public:
311 virtual void init(Context *ctx) override;
312};
313
314class SIM_API KSplitRecorder : public StatisticsRecorder
315{
316 public:
317 virtual void init(Context *ctx) override;
318};
319
321
322} // namespace omnetpp
323
324#endif
virtual std::string str() const override
virtual std::string str() const override
virtual std::string str() const override
virtual std::string str() const override
virtual std::string str() const override
virtual std::string str() const override
int64_t-based, base-10 fixed-point simulation time.
Definition simtime.h:67
Listener for recording signal values via a cStatistic. NaN values in the input are ignored,...
Definition resultrecorders.h:273
virtual void forEachChild(cVisitor *v) override
virtual std::string str() const override
virtual std::string str() const override
virtual std::string str() const override
virtual std::string str() const override
virtual std::string str() const override
Abstract base class for numeric result recorders.
Definition cresultrecorder.h:129
cObject is a lightweight class which serves as the root of the OMNeT++ class hierarchy....
Definition cobject.h:93
Base class for result filters.
Definition cresultfilter.h:73
cStatistic is an abstract class for computing statistical properties of a random variable.
Definition cstatistic.h:35
Enables traversing the tree of (cObject-rooted) simulation objects.
Definition cvisitor.h:57
Lightweight string-to-string map, used internally in some parts of OMNeT++.
Definition opp_string.h:220
int64_t intval_t
Signed integer type which is guaranteed to be at least 64 bits wide. It is used throughout the librar...
Definition simkerneldefs.h:101
uint64_t uintval_t
Unsigned integer type which is guaranteed to be at least 64 bits wide. It is used throughout the libr...
Definition simkerneldefs.h:109
SimTime simtime_t
Represents simulation time.
Definition simtime_t.h:40
const simtime_t & simtime_t_cref
Constant reference to a simtime_t.
Definition simtime_t.h:48
#define SIMTIME_ZERO
Zero simulation time.
Definition simtime_t.h:70
Definition cresultrecorder.h:82