cfingerprint.h Source File

API: cfingerprint.h Source File
API
cfingerprint.h
1//==========================================================================
2// CFINGERPRINT.H - part of
3// OMNeT++/OMNEST
4// Discrete System Simulation in C++
5//
6//==========================================================================
7
8/*--------------------------------------------------------------*
9 Copyright (C) 1992-2008 Andras Varga
10 Copyright (C) 2006-2008 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 __CFINGERPRINT_H
17#define __CFINGERPRINT_H
18
19#include <set>
20#include <cstring>
21#include "simkerneldefs.h"
22#include "cevent.h"
23#include "cmessage.h"
24#include "chasher.h"
25#include "cmatchexpression.h"
26
27namespace omnetpp {
28
35class SIM_API cFingerprintCalculator : public cObject, noncopyable
36{
37 public:
40 virtual ~cFingerprintCalculator() {}
42
46 virtual void initialize(const char *expectedFingerprints, cConfiguration *cfg, int index=-1) = 0;
47
50 virtual void addEvent(cEvent *event) = 0;
51 virtual void addScalarResult(const cComponent *component, const char *name, double value) = 0;
52 virtual void addStatisticResult(const cComponent *component, const char *name, const cStatistic *value) = 0;
53 virtual void registerVectorResult(void *vechandle, const cComponent *component, const char *name) = 0;
54 virtual void addVectorResult(void *vechandle, const simtime_t& t, double value) = 0;
55 virtual void addVisuals() = 0;
56
57 virtual void addExtraData(const char *data, size_t length) = 0;
58 virtual void addExtraData(char data) = 0;
59 virtual void addExtraData(short data) = 0;
60 virtual void addExtraData(int data) = 0;
61 virtual void addExtraData(long data) = 0;
62 virtual void addExtraData(long long data) = 0;
63 virtual void addExtraData(unsigned char data) = 0;
64 virtual void addExtraData(unsigned short data) = 0;
65 virtual void addExtraData(unsigned int data) = 0;
66 virtual void addExtraData(unsigned long data) = 0;
67 virtual void addExtraData(unsigned long long data) = 0;
68 virtual void addExtraData(double data) = 0;
69 virtual void addExtraData(const char *data) = 0;
71
76 virtual bool checkFingerprint() const = 0;
77};
78
112class SIM_API cSingleFingerprintCalculator : public cFingerprintCalculator
113{
114 protected:
115 enum FingerprintIngredient {
116 EVENT_NUMBER = 'e',
117 SIMULATION_TIME = 't',
118 MESSAGE_FULL_NAME = 'n',
119 MESSAGE_CLASS_NAME = 'c',
120 MESSAGE_KIND = 'k',
121 MESSAGE_BIT_LENGTH = 'l',
122 MESSAGE_CONTROL_INFO_CLASS_NAME = 'o',
123 MESSAGE_CONTROL_INFO = 'g',
124 MESSAGE_WITH_INTERNALS = 'd',
125 MESSAGE_DATA = MESSAGE_WITH_INTERNALS, // old name
126 MESSAGE_CONTENTS = 'b',
127 MODULE_ID = 'i',
128 MODULE_FULL_NAME = 'm',
129 MODULE_FULL_PATH = 'p',
130 MODULE_CLASS_NAME = 'a',
131 RANDOM_NUMBERS_DRAWN = 'r',
132 RESULT_SCALAR = 's',
133 RESULT_STATISTIC = 'z',
134 RESULT_VECTOR = 'v',
135 DISPLAY_STRINGS = 'y',
136 CANVAS_FIGURES = 'f',
137 EXTRA_DATA = 'x',
138 CLEAN_HASHER = '0'
139 };
140
141 class MatchableObject : public cMatchExpression::Matchable
142 {
143 private:
144 const cObject *object;
145 mutable std::string attributeValue;
146
147 public:
148 MatchableObject(const cObject *object) : object(object) {}
149
150 virtual const char *getAsString() const;
151 virtual const char *getAsString(const char *attribute) const;
152 };
153
154 protected:
155 std::string expectedFingerprints;
156 std::string ingredients;
157 cMatchExpression *eventMatcher = nullptr;
158 cMatchExpression *moduleMatcher = nullptr;
159 cMatchExpression *resultMatcher = nullptr;
160 cHasher hasher_;
161 [[deprecated]] cHasher *hasher = &hasher_;
162 bool addEvents = false;
163 bool addScalarResults = false;
164 bool addStatisticResults = false;
165 bool addVectorResults = false;
166 bool addExtraData_ = false;
167 std::set<void*> enabledVecHandles;
168
169 protected:
170 virtual FingerprintIngredient validateIngredient(char ch);
171 virtual void parseIngredients(const char *s);
172 virtual void parseEventMatcher(const char *s);
173 virtual void parseModuleMatcher(const char *s);
174 virtual void parseResultMatcher(const char *s);
175 virtual bool addEventIngredient(cEvent *event, FingerprintIngredient ingredient);
176 virtual void addModuleVisuals(cModule *module, bool displayStrings, bool figures);
177
178 public:
179 cSingleFingerprintCalculator() {}
180 virtual ~cSingleFingerprintCalculator();
181
182 virtual cSingleFingerprintCalculator *dup() const override { return new cSingleFingerprintCalculator(); }
183 virtual std::string str() const override;
184 virtual void initialize(const char *expectedFingerprints, cConfiguration *cfg, int index=-1) override;
185
186 virtual void addEvent(cEvent *event) override;
187 virtual void addScalarResult(const cComponent *component, const char *name, double value) override;
188 virtual void addStatisticResult(const cComponent *component, const char *name, const cStatistic *value) override;
189 virtual void registerVectorResult(void *vechandle, const cComponent *component, const char *name) override;
190 virtual void addVectorResult(void *vechandle, const simtime_t& t, double value) override;
191 virtual void addVisuals() override;
192
193 virtual void addExtraData(const char *buffer, size_t length) override { if (addExtraData_) hasher_.add(buffer, length); }
194 virtual void addExtraData(char data) override { if (addExtraData_) hasher_.add(data); }
195 virtual void addExtraData(short data) override { if (addExtraData_) hasher_.add(data); }
196 virtual void addExtraData(int data) override { if (addExtraData_) hasher_.add(data); }
197 virtual void addExtraData(long data) override { if (addExtraData_) hasher_.add(data); }
198 virtual void addExtraData(long long data) override { if (addExtraData_) hasher_.add(data); }
199 virtual void addExtraData(unsigned char data) override { if (addExtraData_) hasher_.add(data); }
200 virtual void addExtraData(unsigned short data) override { if (addExtraData_) hasher_.add(data); }
201 virtual void addExtraData(unsigned int data) override { if (addExtraData_) hasher_.add(data); }
202 virtual void addExtraData(unsigned long data) override { if (addExtraData_) hasher_.add(data); }
203 virtual void addExtraData(unsigned long long data) override { if (addExtraData_) hasher_.add(data); }
204 virtual void addExtraData(double data) override { if (addExtraData_) hasher_.add(data); }
205 virtual void addExtraData(const char *data) override { if (addExtraData_) hasher_.add(data); }
206
207 virtual bool checkFingerprint() const override;
208
209};
210
211
220class SIM_API cMultiFingerprintCalculator : public cFingerprintCalculator
221{
222 protected:
223 cFingerprintCalculator *prototype;
224 std::vector<cFingerprintCalculator *> elements;
225
226 public:
227 cMultiFingerprintCalculator(cFingerprintCalculator *prototype);
228 virtual ~cMultiFingerprintCalculator();
229
230 virtual cMultiFingerprintCalculator *dup() const override { return new cMultiFingerprintCalculator(static_cast<cFingerprintCalculator *>(prototype->dup())); }
231 virtual std::string str() const override;
232 virtual void initialize(const char *expectedFingerprints, cConfiguration *cfg, int index=-1) override;
233
234 virtual void addEvent(cEvent *event) override;
235 virtual void addScalarResult(const cComponent *component, const char *name, double value) override;
236 virtual void addStatisticResult(const cComponent *component, const char *name, const cStatistic *value) override;
237 virtual void registerVectorResult(void *vechandle, const cComponent *component, const char *name) override;
238 virtual void addVectorResult(void *vechandle, const simtime_t& t, double value) override;
239 virtual void addVisuals() override;
240
241 virtual void addExtraData(const char *data, size_t length) override { for (auto element: elements) element->addExtraData(data, length); }
242 virtual void addExtraData(char data) override { for (auto element: elements) element->addExtraData(data); }
243 virtual void addExtraData(short data) override { for (auto element: elements) element->addExtraData(data); }
244 virtual void addExtraData(int data) override { for (auto element: elements) element->addExtraData(data); }
245 virtual void addExtraData(long data) override { for (auto element: elements) element->addExtraData(data); }
246 virtual void addExtraData(long long data) override { for (auto element: elements) element->addExtraData(data); }
247 virtual void addExtraData(unsigned char data) override { for (auto element: elements) element->addExtraData(data); }
248 virtual void addExtraData(unsigned short data) override { for (auto element: elements) element->addExtraData(data); }
249 virtual void addExtraData(unsigned int data) override { for (auto element: elements) element->addExtraData(data); }
250 virtual void addExtraData(unsigned long data) override { for (auto element: elements) element->addExtraData(data); }
251 virtual void addExtraData(unsigned long long data) override { for (auto element: elements) element->addExtraData(data); }
252 virtual void addExtraData(double data) override { for (auto element: elements) element->addExtraData(data); }
253 virtual void addExtraData(const char *data) override { for (auto element: elements) element->addExtraData(data); }
254
255 virtual bool checkFingerprint() const override;
256};
257
258} // namespace omnetpp
259
260#endif
261
Common base for module and channel classes.
Definition ccomponent.h:51
Represents the configuration, as accessed by the simulation kernel.
Definition cconfiguration.h:77
Represents an event in the discrete event simulator.
Definition cevent.h:47
This class defines the interface for fingerprint calculators.
Definition cfingerprint.h:36
virtual void initialize(const char *expectedFingerprints, cConfiguration *cfg, int index=-1)=0
virtual bool checkFingerprint() const =0
Utility class to calculate the hash of some data.
Definition chasher.h:41
Objects to be matched must implement this interface.
Definition cmatchexpression.h:63
Decides whether an object matches an expression.
Definition cmatchexpression.h:56
This class represents modules in the simulation.
Definition cmodule.h:49
virtual bool checkFingerprint() const override
virtual void initialize(const char *expectedFingerprints, cConfiguration *cfg, int index=-1) override
virtual std::string str() const override
virtual cMultiFingerprintCalculator * dup() const override
Definition cfingerprint.h:230
cObject is a lightweight class which serves as the root of the OMNeT++ class hierarchy....
Definition cobject.h:93
cObject()
Definition cobject.h:124
virtual cSingleFingerprintCalculator * dup() const override
Definition cfingerprint.h:182
virtual bool checkFingerprint() const override
virtual void initialize(const char *expectedFingerprints, cConfiguration *cfg, int index=-1) override
virtual std::string str() const override
cStatistic is an abstract class for computing statistical properties of a random variable.
Definition cstatistic.h:35
SimTime simtime_t
Represents simulation time.
Definition simtime_t.h:40