cparimpl.h Source File¶

API: cparimpl.h Source File
API
cparimpl.h
1//==========================================================================
2// CPARIMPL.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_CPARIMPL_H
17#define __OMNETPP_CPARIMPL_H
18
19#include "cpar.h"
20#include "cexpression.h"
21#include "cexception.h"
22#include "fileline.h"
23#include "opp_pooledstring.h"
24
25namespace omnetpp {
26
27class cExpression;
28class cXMLElement;
29class cProperties;
30class cComponent;
31
32namespace internal {
33
46class SIM_API cParImpl : public cNamedObject
47{
48 protected:
49 // various flags, stored in cNamedObject::flags
50 enum {
51 FL_ISVOLATILE = 4, // whether it was declared as "volatile" in NED
52 FL_ISEXPR = 8, // whether it stores a constant or an expression
53 FL_ISSHARED = 16, // used by cPar only: whether this object is shared among multiple cPars
54 FL_CONTAINSVALUE = 32, // whether it has a value
55 FL_ISSET = 64, // whether the contained value is just a default value (false) or the set value (true)
56 FL_ISMUTABLE = 128 // whether it was declared as "mutable" in NED
57 };
58
59 private:
60 // unit (s, mW, GHz, baud, etc); optional
61 opp_staticpooledstring unit = nullptr;
62
63 // base directory for interpreting relative path names in the expression (e.g. xmldoc())
64 opp_staticpooledstring baseDirectory = nullptr;
65
66 // the file/line location where the value was assigned from
67 FileLine sourceLoc;
68
69 // global variables for statistics
70 static long totalParimplObjs;
71 static long liveParimplObjs;
72
73 private:
74 void copy(const cParImpl& other);
75
76 public:
77 typedef cPar::Type Type;
78
79 protected:
80 cValue evaluate(cExpression *expr, cComponent *context, const cPar *targetPar) const;
81 void deleteOld(cExpression *expr);
82
83 public:
86
90 explicit cParImpl();
91
95 cParImpl(const cParImpl& other) : cNamedObject(other) {copy(other);}
96
100 virtual ~cParImpl();
101
105 cParImpl& operator=(const cParImpl& otherpar);
107
110
113 virtual cParImpl *dup() const override;
114
118 virtual void parsimPack(cCommBuffer *buffer) const override;
119
123 virtual void parsimUnpack(cCommBuffer *buffer) override;
125
128
131 virtual Type getType() const = 0;
132
136 virtual bool isNumeric() const = 0;
137
141 virtual bool isVolatile() const {return flags & FL_ISVOLATILE;}
142
146 virtual bool isMutable() const {return flags & FL_ISMUTABLE;}
147
153 virtual bool isExpression() const {return flags & FL_ISEXPR;}
154
158 virtual bool isShared() const {return flags & FL_ISSHARED;}
159
164 virtual bool containsValue() const {return flags & FL_CONTAINSVALUE;}
165
171 virtual bool isSet() const {return flags & FL_ISSET;}
172
179 virtual void setIsVolatile(bool f) {setFlag(FL_ISVOLATILE,f);}
180
184 virtual void setIsMutable(bool f) {setFlag(FL_ISMUTABLE,f);}
185
189 virtual void setIsShared(bool f) {setFlag(FL_ISSHARED,f);}
190
194 virtual void setIsSet(bool f) {setFlag(FL_ISSET,f);}
195
201 virtual const char *getUnit() const {return unit.c_str();}
202
206 virtual void setUnit(const char *s) {unit = s;}
207
212 virtual const char *getBaseDirectory() const {return baseDirectory.c_str();}
213
218 virtual void setBaseDirectory(const char *s) {baseDirectory = s;}
219
223 virtual void setSourceLocation(const FileLine &loc);
224
228 virtual void clearSourceLocation();
229
234 virtual const FileLine& getSourceLocation() const {return sourceLoc;}
236
239
243 virtual void setBoolValue(bool b) = 0;
244
248 virtual void setIntValue(intval_t l) = 0;
249
253 virtual void setDoubleValue(double d) = 0;
254
260 virtual void setStringValue(const char *s) = 0;
261
265 virtual void setStringValue(const std::string& s) {setStringValue(s.c_str());}
266
270 virtual void setObjectValue(cObject *object) = 0;
271
275 virtual void setXMLValue(cXMLElement *node) = 0;
276
285 virtual void setExpression(cExpression *e) = 0;
287
290
294 virtual bool boolValue(cComponent *context, const cPar *targetPar) const = 0;
295
300 virtual intval_t intValue(cComponent *context, const cPar *targetPar) const = 0;
301
306 virtual double doubleValue(cComponent *context, const cPar *targetPar) const = 0;
307
316 virtual const char *stringValue(cComponent *context, const cPar *targetPar) const = 0;
317
321 virtual std::string stdstringValue(cComponent *context, const cPar *targetPar) const = 0;
322
326 virtual cObject *objectValue(cComponent *context, const cPar *targetPar) const = 0;
327
331 virtual cXMLElement *xmlValue(cComponent *context, const cPar *targetPar) const = 0;
332
336 virtual cExpression *getExpression() const = 0;
338
341
347 virtual void convertToConst(cComponent *context, const cPar *targetPar) = 0;
348
353 virtual std::string unparse() const = 0;
354
360 virtual void parse(const char *text, FileLine loc, const cPar *targetPar) = 0;
361
365 static cParImpl *createWithType(Type type);
366
371 virtual int compare(const cParImpl *other) const;
372
376 virtual void forEachChild(cVisitor *v, cComponent *context) {}
377
380
383
390 static long getTotalParImplObjectCount() {return totalParimplObjs;}
391
398 static long getLiveParImplObjectCount() {return liveParimplObjs;}
399
404 static void resetParImplObjectCounters() {totalParimplObjs=liveParimplObjs=0L;}
406};
407
408} // namespace internal
409} // namespace omnetpp
410
411
412#endif
413
414
Definition fileline.h:28
Buffer for the communications layer of parallel simulation.
Definition ccommbuffer.h:42
Common base for module and channel classes.
Definition ccomponent.h:51
Abstract base class for expression evaluators.
Definition cexpression.h:34
cNamedObject()
Definition cnamedobject.h:57
cObject()
Definition cobject.h:124
virtual void forEachChild(cVisitor *v)
Represents a module or channel parameter.
Definition cpar.h:71
A collection of properties (cProperty).
Definition cproperties.h:35
A variant-like value class used during evaluating NED expressions.
Definition cvalue.h:48
Enables traversing the tree of (cObject-rooted) simulation objects.
Definition cvisitor.h:57
Represents an XML element in an XML configuration file.
Definition cxmlelement.h:76
virtual bool isMutable() const
Definition cparimpl.h:146
virtual void setSourceLocation(const FileLine &loc)
virtual Type getType() const =0
static void resetParImplObjectCounters()
Definition cparimpl.h:404
virtual bool boolValue(cComponent *context, const cPar *targetPar) const =0
virtual bool isExpression() const
Definition cparimpl.h:153
virtual void setIsShared(bool f)
Definition cparimpl.h:189
virtual void setStringValue(const char *s)=0
virtual cXMLElement * xmlValue(cComponent *context, const cPar *targetPar) const =0
virtual bool isShared() const
Definition cparimpl.h:158
virtual intval_t intValue(cComponent *context, const cPar *targetPar) const =0
virtual std::string unparse() const =0
virtual void forEachChild(cVisitor *v, cComponent *context)
Definition cparimpl.h:376
virtual void setBoolValue(bool b)=0
virtual void setDoubleValue(double d)=0
virtual cExpression * getExpression() const =0
static long getLiveParImplObjectCount()
Definition cparimpl.h:398
virtual bool isVolatile() const
Definition cparimpl.h:141
virtual std::string stdstringValue(cComponent *context, const cPar *targetPar) const =0
virtual bool isSet() const
Definition cparimpl.h:171
virtual void parse(const char *text, FileLine loc, const cPar *targetPar)=0
virtual void parsimPack(cCommBuffer *buffer) const override
virtual void setExpression(cExpression *e)=0
virtual void setIsVolatile(bool f)
Definition cparimpl.h:179
virtual void setXMLValue(cXMLElement *node)=0
virtual void setIsMutable(bool f)
Definition cparimpl.h:184
virtual void setIntValue(intval_t l)=0
virtual cObject * objectValue(cComponent *context, const cPar *targetPar) const =0
virtual int compare(const cParImpl *other) const
virtual bool isNumeric() const =0
virtual cParImpl * dup() const override
virtual const char * getBaseDirectory() const
Definition cparimpl.h:212
virtual void parsimUnpack(cCommBuffer *buffer) override
virtual bool containsValue() const
Definition cparimpl.h:164
virtual void setStringValue(const std::string &s)
Definition cparimpl.h:265
virtual double doubleValue(cComponent *context, const cPar *targetPar) const =0
virtual const char * getUnit() const
Definition cparimpl.h:201
virtual void clearSourceLocation()
static cParImpl * createWithType(Type type)
virtual const char * stringValue(cComponent *context, const cPar *targetPar) const =0
cParImpl(const cParImpl &other)
Definition cparimpl.h:95
cParImpl & operator=(const cParImpl &otherpar)
virtual void setObjectValue(cObject *object)=0
static long getTotalParImplObjectCount()
Definition cparimpl.h:390
virtual void setBaseDirectory(const char *s)
Definition cparimpl.h:218
virtual const FileLine & getSourceLocation() const
Definition cparimpl.h:234
virtual void setUnit(const char *s)
Definition cparimpl.h:206
virtual void setIsSet(bool f)
Definition cparimpl.h:194
virtual void convertToConst(cComponent *context, const cPar *targetPar)=0
Definition opp_pooledstring.h:30
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