resultfilters.h Source File¶

API: resultfilters.h Source File
API
resultfilters.h
1//==========================================================================
2// RESULTFILTERS.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_RESULTFILTERS_H
17#define __OMNETPP_RESULTFILTERS_H
18
19#include <cmath> // INFINITY, NAN
20#include "omnetpp/simkerneldefs.h"
21#include "omnetpp/statsum_t.h"
22#include "omnetpp/cresultfilter.h"
23#include "omnetpp/csimulation.h"
24#include "omnetpp/cstatistic.h"
25
26namespace omnetpp {
27
32
40class SIM_API WarmupPeriodFilter : public cResultFilter
41{
42 protected:
43 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, bool b, cObject *details) override;
44 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, intval_t, cObject *details) override;
45 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, uintval_t, cObject *details) override;
46 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, double d, cObject *details) override;
47 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const SimTime& v, cObject *details) override;
48 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const char *s, cObject *details) override;
49 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, cObject *obj, cObject *details) override;
50 public:
51 virtual simtime_t_cref getEndWarmupPeriod() const {return getSimulation()->getWarmupPeriod();}
52 virtual std::string str() const override;
53};
54
65class SIM_API DemuxFilter : public cResultFilter
66{
67 private:
68 int fanOut = -1; // number of initial outputs; #outputs is a multiple of fanOut
69 std::map<std::string, int> labelToDelegateStartIndexMap;
70 private:
71 int getDelegateStartIndexByLabel(cObject *details);
72 cResultListener *copyChain(cResultListener *templateChain, const char *label);
73 protected:
74 virtual std::string getDemuxLabel(cObject *details);
75 protected:
76 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, bool b, cObject *details) override;
77 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, intval_t, cObject *details) override;
78 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, uintval_t, cObject *details) override;
79 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, double d, cObject *details) override;
80 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const SimTime& v, cObject *details) override;
81 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const char *s, cObject *details) override;
82 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, cObject *obj, cObject *details) override;
83 public:
84 virtual std::string str() const override;
85};
86
90class SIM_API TotalCountFilter : public cResultFilter
91{
92 protected:
93 intval_t count;
94 protected:
95 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, bool b, cObject *details) override {count++; fire(this,t,count,details);}
96 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, intval_t l, cObject *details) override {count++; fire(this,t,count,details);}
97 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, uintval_t l, cObject *details) override {count++; fire(this,t,count,details);}
98 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, double d, cObject *details) override {count++; fire(this,t,count,details);}
99 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const SimTime& v, cObject *details) override {count++; fire(this,t,count,details);}
100 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const char *s, cObject *details) override {count++; fire(this,t,count,details);}
101 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, cObject *obj, cObject *details) override {count++; fire(this,t,count,details);}
102 public:
103 TotalCountFilter() {count = 0;}
104 intval_t getCount() const {return count;}
105 virtual double getInitialDoubleValue() const override {return getCount();}
106 virtual std::string str() const override;
107};
108
113class SIM_API CountFilter : public TotalCountFilter
114{
115 protected:
116 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, double d, cObject *details) override {if (!std::isnan(d)) count++; fire(this,t,count,details);}
117 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const char *s, cObject *details) override {if (s) count++; fire(this,t,count,details);}
118 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, cObject *obj, cObject *details) override {if (obj) count++; fire(this,t,count,details);}
119 public:
120 CountFilter() {}
121};
122
127class SIM_API ConstantFilter : public cResultFilter
128{
129 protected:
130 double c;
131 protected:
132 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, bool b, cObject *details) override {fire(this,t,c,details);}
133 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, intval_t l, cObject *details) override {fire(this,t,c,details);}
134 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, uintval_t l, cObject *details) override {fire(this,t,c,details);}
135 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, double d, cObject *details) override {fire(this,t,c,details);}
136 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const SimTime& v, cObject *details) override {fire(this,t,c,details);}
137 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const char *s, cObject *details) override {fire(this,t,c,details);}
138 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, cObject *obj, cObject *details) override {fire(this,t,c,details);}
139 public:
140 ConstantFilter(double c) {this->c = c;}
141 double getConstant() const {return c;}
142 virtual double getInitialDoubleValue() const override {return c;}
143 virtual std::string str() const override;
144};
145
149class SIM_API Constant0Filter : public ConstantFilter
150{
151 public:
152 Constant0Filter() : ConstantFilter(0) {}
153};
154
158class SIM_API Constant1Filter : public ConstantFilter
159{
160 public:
161 Constant1Filter() : ConstantFilter(1) {}
162};
163
170class SIM_API TimeFilter : public cResultFilter
171{
172 protected:
173 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, bool b, cObject *details) override {fire(this,t,t,details);}
174 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, intval_t l, cObject *details) override {fire(this,t,t,details);}
175 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, uintval_t l, cObject *details) override {fire(this,t,t,details);}
176 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, double d, cObject *details) override {fire(this,t,t,details);}
177 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const SimTime& v, cObject *details) override {fire(this,t,t,details);}
178 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const char *s, cObject *details) override {fire(this,t,t,details);}
179 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, cObject *obj, cObject *details) override {fire(this,t,t,details);}
180 public:
181 TimeFilter() {}
182};
183
187class SIM_API IdentityFilter : public cResultFilter
188{
189 protected:
190 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, bool b, cObject *details) override {fire(this,t,b,details);}
191 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, intval_t l, cObject *details) override {fire(this,t,l,details);}
192 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, uintval_t l, cObject *details) override {fire(this,t,l,details);}
193 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, double d, cObject *details) override {fire(this,t,d,details);}
194 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const SimTime& v, cObject *details) override {fire(this,t,v,details);}
195 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, const char *s, cObject *details) override {fire(this,t,s,details);}
196 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, cObject *obj, cObject *details) override {fire(this,t,obj,details);}
197 public:
198 IdentityFilter() {}
199};
200
204class SIM_API MergeFilter : public IdentityFilter
205{
206 protected:
207 virtual void subscribedTo(cResultFilter *prev) override {} // to allow subscription to multiple signals
208 public:
209 MergeFilter() {}
210};
211
212
217{
218 protected:
219 virtual bool process(simtime_t& t, double& value, cObject *details) override {return !std::isnan(value);}
220};
221
226{
227 protected:
228 virtual bool process(simtime_t& t, double& value, cObject *details) override;
229};
230
234class SIM_API CountNanFilter : public cNumericResultFilter
235{
236 protected:
237 intval_t count = 0;
238 protected:
239 virtual bool process(simtime_t& t, double& value, cObject *details) override;
240 public:
241 CountNanFilter() {}
242 intval_t getCount() const {return count;}
243 virtual double getInitialDoubleValue() const override {return getCount();}
244 virtual std::string str() const override;
245};
246
250class SIM_API SumFilter : public cNumericResultFilter
251{
252 protected:
253 statsum_t sum;
254 protected:
255 virtual bool process(simtime_t& t, double& value, cObject *details) override;
256 public:
257 SumFilter() {sum = 0;}
258 double getSum() const {return sum;}
259 virtual double getInitialDoubleValue() const override {return getSum();}
260 virtual std::string str() const override;
261};
262
268class SIM_API MeanFilter : public cNumericResultFilter
269{
270 protected:
271 bool timeWeighted = false;
272 intval_t count = 0;
273 double lastValue = NAN;
274 simtime_t lastTime = SIMTIME_ZERO;
275 statsum_t weightedSum = 0;
276 simtime_t totalTime = SIMTIME_ZERO;
277 protected:
278 virtual bool process(simtime_t& t, double& value, cObject *details) override;
279 public:
280 MeanFilter() {}
281 virtual void init(Context *ctx) override;
282 virtual void finish(cResultFilter *prev) override;
283 double getMean() const;
284 virtual std::string str() const override;
285};
286
291class SIM_API MinFilter : public cNumericResultFilter
292{
293 protected:
294 double min;
295 protected:
296 virtual bool process(simtime_t& t, double& value, cObject *details) override;
297 public:
298 MinFilter() {min = INFINITY;}
299 double getMin() const {return min;}
300 virtual std::string str() const override;
301};
302
307class SIM_API MaxFilter : public cNumericResultFilter
308{
309 protected:
310 double max;
311 protected:
312 virtual bool process(simtime_t& t, double& value, cObject *details) override;
313 public:
314 MaxFilter() {max = -INFINITY;}
315 double getMax() const {return max;}
316 virtual std::string str() const override;
317};
318
323class SIM_API AverageFilter : public cNumericResultFilter
324{
325 protected:
326 intval_t count;
327 statsum_t sum;
328 protected:
329 virtual bool process(simtime_t& t, double& value, cObject *details) override;
330 public:
331 AverageFilter() {count = 0; sum = 0;}
332 double getAverage() const {return sum/count;}
333 virtual std::string str() const override;
334};
335
347class SIM_API TimeAverageFilter : public cNumericResultFilter
348{
349 protected:
350 double lastValue = NAN;
351 simtime_t lastTime = SIMTIME_ZERO;
352 statsum_t weightedSum = 0;
353 simtime_t totalTime = SIMTIME_ZERO;
354 protected:
355 virtual bool process(simtime_t& t, double& value, cObject *details) override;
356 public:
357 TimeAverageFilter() {}
358 virtual void finish(cResultFilter *prev) override;
359 double getTimeAverage() const;
360 virtual std::string str() const override;
361};
362
383class SIM_API RateAverageFilter : public cNumericResultFilter
384{
385 protected:
386 simtime_t lastTime = SIMTIME_ZERO;
387 statsum_t weightedSum = 0;
388 simtime_t totalTime = SIMTIME_ZERO;
389 protected:
390 virtual bool process(simtime_t& t, double& value, cObject *details) override;
391 public:
392 RateAverageFilter() {}
393 double getRateAverage() const;
394 virtual std::string str() const override;
395};
396
400class SIM_API RemoveRepeatsFilter : public cNumericResultFilter
401{
402 protected:
403 double prev;
404 protected:
405 virtual bool process(simtime_t& t, double& value, cObject *details) override;
406 public:
407 RemoveRepeatsFilter() {prev = NAN;}
408 double getLastValue() const {return prev;}
409 virtual std::string str() const override;
410};
411
417{
418 protected:
419 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, cObject *object, cObject *details) override;
420 public:
421 using cObjectResultFilter::receiveSignal;
422};
423
429{
430 protected:
431 virtual void receiveSignal(cResultFilter *prev, simtime_t_cref t, cObject *object, cObject *details) override;
432 public:
433 using cObjectResultFilter::receiveSignal;
434};
435
440class SIM_API SumPerDurationFilter : public cNumericResultFilter
441{
442 protected:
443 statsum_t sum;
444 protected:
445 virtual bool process(simtime_t& t, double& value, cObject *details) override;
446 public:
447 SumPerDurationFilter() {sum = 0;}
448 virtual void finish(cResultFilter *prev) override;
449 double getSumPerDuration() const;
450 virtual double getInitialDoubleValue() const override {return getSumPerDuration();}
451 virtual std::string str() const override;
452};
453
455
456} // namespace omnetpp
457
458#endif
virtual std::string str() const override
virtual std::string str() const override
virtual std::string str() const override
Result filter that demultiplexes its input to several outputs. The selector (a.ka....
Definition resultfilters.h:66
virtual std::string str() const override
Filter that raises a runtime error if it sees a NaN in the input.
Definition resultfilters.h:226
virtual std::string str() const override
virtual std::string str() const override
virtual std::string str() const override
Filter that expects a cPacket and outputs its length in bits (getBitLength()). Null (nullptr) values ...
Definition resultfilters.h:429
Filter that expects a cPacket and outputs its length in bytes (getByteLength()). Null (nullptr) value...
Definition resultfilters.h:417
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
Filter that removes (filters out) NaNs, and lets through all other values.
Definition resultfilters.h:217
virtual std::string str() const override
virtual std::string str() const override
virtual std::string str() const override
virtual std::string str() const override
Result filter that absorbs input values during the configured warm-up period (see warmup-period confi...
Definition resultfilters.h:41
virtual std::string str() const override
Base class for filters that expect to receive an numeric value.
Definition cresultfilter.h:124
Base class for filters that expect to receive an object.
Definition cresultfilter.h:148
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
Common abstract base class for result filters and result recorders.
Definition cresultlistener.h:35
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
cSimulation * getSimulation()
Returns the currently active simulation, or nullptr if there is none.
Definition csimulation.h:623
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 cresultfilter.h:78