ccomponent.h Source File¶

API: ccomponent.h Source File
API
ccomponent.h
1//==========================================================================
2// CCOMPONENT.H - header for
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_CCOMPONENT_H
17#define __OMNETPP_CCOMPONENT_H
18
19#include <vector>
20#include <unordered_set>
21#include "simkerneldefs.h"
22#include "cownedobject.h"
23#include "cpar.h"
24#include "csoftowner.h"
25#include "simtime.h"
26#include "cenvir.h"
27#include "clistener.h"
28#include "clog.h"
29#include "distrib.h"
30
31namespace omnetpp {
32
33class cComponentType;
34class cProperties;
35class cDisplayString;
36class cRNG;
37class cStatistic;
38class cResultRecorder;
39class cRngManager;
40
50class SIM_API cComponent : public cSoftOwner //implies noncopyable
51{
52 friend class cComponentDescriptor; // listener lists, etc
53 friend class cComponent__SignalListenerListDescriptor; // sim_std.msg
54 friend class cPar; // needs to call handleParameterChange()
55 friend class cChannel; // allow access to FL_INITIALIZED, FL_DELETING and releaseLocalListeners()
56 friend class cModule; // allow access to FL_INITIALIZED, FL_DELETING, releaseLocalListeners() and repairSignalFlags()
57 friend class cSimpleModule; // allow access to FL_INITIALIZED, FL_DELETING, releaseLocalListeners() and repairSignalFlags()
58 friend class cGate; // because of repairSignalFlags()
59 friend class cSimulation; // sets componentId
60 friend class cResultListener; // invalidateCachedResultRecorderLists()
61 friend class cRngManager; // rngMapSize, rngMap
62 public:
63 enum ComponentKind { KIND_MODULE, KIND_CHANNEL, KIND_OTHER };
64
65 private:
66 enum {
67 FL_PARAMSFINALIZED = 1 << 2, // whether finalizeParameters() has been called
68 FL_INITIALIZED = 1 << 3, // whether initialize() has completed for this module
69 FL_DELETING = 1 << 4, // module or channel is being deleted (via deleteModule(), disconnect(), etc.)
70 FL_DISPSTR_CHECKED = 1 << 5, // for hasDisplayString(): whether the FL_DISPSTR_NOTEMPTY flag is valid
71 FL_DISPSTR_NOTEMPTY = 1 << 6, // for hasDisplayString(): whether the display string is not empty
72 FL_LOGLEVEL_SHIFT = 7, // 3 bits wide
73 };
74
75 private:
76 typedef internal::cParImpl cParImpl;
77
78 cComponentType *componentType; // component type object
79 cSimulation *simulation; // the simulation it belongs to
80 int componentId; // id in cSimulation
81
82 short lastCompletedInitStage;
83
84 short rngMapSize; // size of the rngMap array (RNGs with index >= rngMapSize are mapped one-to-one to global RNGs)
85 int *rngMap; // maps local RNG numbers (may be nullptr if rngMapSize==0)
86
87 short numPars;
88 short parArraySize;
89 cPar *parArray; // array of cPar objects
90
91 mutable cDisplayString *displayString; // created on demand
92 opp_pooledstring displayName = nullptr; // optional display name
93
94 public:
95 struct SignalListenerList { // public for inspectors
96 simsignal_t signalID;
97 cIListener **listeners; // nullptr-terminated array
98
99 SignalListenerList() {signalID=SIMSIGNAL_NULL; listeners=nullptr;}
100 const char *getSignalName() const;
101 std::string str() const;
102 void dispose() {delete [] listeners;}
103 bool addListener(cIListener *l);
104 bool removeListener(cIListener *l);
105 int findListener(cIListener *l) const;
106 bool hasListener() const {return listeners && listeners[0];}
107 int countListeners() const;
108 cIListener *getListener(int k) const {return listeners[k];} // unsafe
109 static bool gt(const SignalListenerList& e1, const SignalListenerList& e2) {return e1.signalID > e2.signalID;}
110 };
111
112 private:
113 typedef std::vector<SignalListenerList> SignalTable;
114 SignalTable *signalTable; // ordered by signalID so we can do binary search
115
116 std::unordered_set<void**> *selfPointers = nullptr;
117
118 // string-to-simsignal_t mapping
119 static struct SignalNameMapping {
120 std::map<std::string,simsignal_t> signalNameToID;
121 std::map<simsignal_t,std::string> signalIDToName;
122 } *signalNameMapping; // must be dynamically allocated on first access so that registerSignal() can be invoked from static initialization code
123 static int lastSignalID;
124
125 // for hasListeners()/mayHaveListeners()
126 static std::vector<int> signalListenerCounts; // index: signalID, value: number of listeners anywhere
127
128 // stack of listener lists being notified, to detect concurrent modification
129 static cIListener **notificationStack[];
130 static int notificationSP;
131
132 // whether only signals declared in NED via @signal are allowed to be emitted
133 static bool checkSignals;
134
135 // for caching the result of getResultRecorders()
136 struct ResultRecorderList {
137 const cComponent *component;
138 std::vector<cResultRecorder*> recorders;
139 };
140
141 // for getResultRecorders(); static because we don't want to increase cComponent's size
142 static std::vector<ResultRecorderList*> cachedResultRecorderLists;
143
144 private:
145 SignalListenerList *findListenerList(simsignal_t signalID) const;
146 SignalListenerList *findOrCreateListenerList(simsignal_t signalID);
147 void throwInvalidSignalID(simsignal_t signalID) const;
148 void removeListenerList(simsignal_t signalID);
149 void checkNotFiring(simsignal_t, cIListener **listenerList);
150 template<typename T> void fire(cComponent *src, simsignal_t signalID, T x, cObject *details);
151 void fireFinish();
152 void releaseLocalListeners();
153 const SignalListenerList& getListenerList(int k) const {return (*signalTable)[k];} // for inspectors
154 int getSignalTableSize() const {return signalTable ? signalTable->size() : 0;} // for inspectors
155 void collectResultRecorders(std::vector<cResultRecorder*>& result) const;
156 virtual void doEmit(simsignal_t signalID, intval_t i, cObject *details);
157 virtual void doEmit(simsignal_t signalID, uintval_t i, cObject *details);
158
159 protected:
160 virtual cModule *doFindModuleByPath(const char *s) const = 0;
161
162 public:
163 // internal: used by log mechanism
164 LogLevel getLogLevel() const { return (LogLevel)((flags >> FL_LOGLEVEL_SHIFT) & 0x7); }
165 virtual void setLogLevel(LogLevel logLevel);
166
167 // internal: invoked from the RNG manager
168 virtual void setRngMap(short size, int *map) {rngMapSize=size; rngMap=map;}
169
170 // internal: sets associated cComponentType for the component;
171 // called as part of the creation process.
172 virtual void setComponentType(cComponentType *componenttype);
173
174 // internal: adds a new parameter to the component; called as part of the creation process
175 virtual void addPar(cParImpl *value);
176
177 // internal: reallocates paramv (size must be >= numparams)
178 void reallocParamv(int size);
179
180 // internal: save parameters
181 virtual void recordParameters();
182 virtual void recordParameterAsScalar(cPar *par);
183
184 // internal: has finalizeParameters() been called?
185 bool parametersFinalized() const {return flags&FL_PARAMSFINALIZED;}
186
187 // internal: sets up @statistic-based result recording
188 virtual void addResultRecorders();
189 virtual void emitStatisticInitialValues();
190
191 // internal: has initialize() been called?
192 bool initialized() const {return flags&FL_INITIALIZED;}
193
194 // internal: calls refreshDisplay() recursively
195 virtual void callRefreshDisplay() = 0;
196
197 // internal: calls preDelete() recursively
198 virtual void callPreDelete(cComponent *root) = 0;
199
200 // internal: used from Qtenv: find out if this module has a display string.
201 // getDisplayString() would create the object immediately which we want to avoid.
202 bool hasDisplayString();
203
204 // internal: clears per-run signals-related data structures; to be invoked before each simulation run
205 static void clearSignalState();
206
207 // internal: clears signal registrations; to be invoked on exit
208 static void clearSignalRegistrations();
209
210 // internal: allocates a signalHasLocalListeners/signalHasAncestorListeners bit index to the
211 // given signal and returns the corresponding mask (1<<index); returns 0 if there are no more
212 // free bit indices. Result is remembered and returned in subsequent calls (until clearSignalState())
213 static uint64_t getSignalMask(simsignal_t signalID);
214
215 // internal: controls whether signals should be validated against @signal declarations in NED files
216 static void setCheckSignals(bool b) {checkSignals = b;}
217 static bool getCheckSignals() {return checkSignals;}
218
219 // internal: for inspectors
220 const std::vector<cResultRecorder*>& getResultRecorders() const;
221 static void invalidateCachedResultRecorderLists();
222
223 // experimental
224 template<class T>
225 void registerSelfPointer(T *&ptr) {
226 ASSERT(dynamic_cast<cComponent*>(ptr) == this);
227 if (!selfPointers)
228 selfPointers = new std::unordered_set<void**>;
229 selfPointers->insert((void**)&ptr);
230 }
231
232 template<class T>
233 void deregisterSelfPointer(T *&ptr) {
234 ASSERT(dynamic_cast<cComponent*>(ptr) == this);
235 ASSERT(selfPointers != nullptr && selfPointers->find((void**)&ptr) != selfPointers->end());
236 selfPointers->erase((void**)&ptr);
237 }
238
239 protected:
259
264 virtual void initialize(int stage) {if (stage==0) initialize();}
265
271 virtual int numInitStages() const {return 1;}
272
277 virtual void initialize();
278
283 virtual void finish();
284
308 virtual void handleParameterChange(const char *parname);
309
336 virtual void refreshDisplay() const;
337
352 virtual void preDelete(cComponent *root);
354
355 public:
358
365 cComponent(const char *name = nullptr);
366
370 virtual ~cComponent();
372
375
378 virtual void forEachChild(cVisitor *v) override;
379
384 const cComponent *getThisPtr() const {return this;} //Note: nonvirtual
386
394 virtual void finalizeParameters();
395
398
402 virtual cProperties *getProperties() const = 0;
403
409 virtual void setDisplayName(const char *name);
410
416 virtual const char *getDisplayName() const {return displayName.c_str();}
417
422
426 cSimulation *getSimulation() const {return simulation;}
427
435 int getId() const {return componentId;}
436
444 virtual const char *getNedTypeName() const;
445
452 virtual std::string getNedTypeAndFullName() const;
453
460 virtual std::string getNedTypeAndFullPath() const;
461
467 virtual ComponentKind getComponentKind() const = 0;
468
472 bool isModule() const {return getComponentKind() == KIND_MODULE;}
473
477 bool isChannel() const {return getComponentKind() == KIND_CHANNEL;}
478
484 virtual cModule *getParentModule() const = 0;
485
490 virtual cModule *getSystemModule() const;
491
516 virtual cModule *getModuleByPath(const char *path) const;
517
526 virtual cModule *findModuleByPath(const char *path) const;
528
534
538 virtual void callInitialize() = 0;
539
544 virtual bool callInitialize(int stage) = 0;
545
550 virtual void callFinish() = 0;
552
555
559 virtual int getNumParams() const {return numPars;}
560
565 virtual cPar& par(int k);
566
571 const cPar& par(int k) const {return const_cast<cComponent *>(this)->par(k);}
572
577 virtual cPar& par(const char *parname);
578
583 const cPar& par(const char *parname) const {return const_cast<cComponent *>(this)->par(parname);}
584
589 virtual int findPar(const char *parname) const;
590
594 bool hasPar(const char *s) const {return findPar(s)>=0;}
596
599
603 virtual int getNumRNGs() const; //TODO rename to getNumRngs(), with delegating compat method
604
609 virtual cRNG *getRNG(int k) const; //TODO rename to getRng(), with delegating compat method
610
614 virtual uint32_t intrand(uint32_t r, int rng=0) const {return getRNG(rng)->intRand(r);}
615
619 virtual double dblrand(int rng=0) const {return getRNG(rng)->doubleRand();}
621
624
631 virtual double uniform(double a, double b, int rng=0) const {return omnetpp::uniform(getRNG(rng), a, b);}
632
636 virtual SimTime uniform(SimTime a, SimTime b, int rng=0) const {return uniform(a.dbl(), b.dbl(), rng);}
637
645 virtual double exponential(double mean, int rng=0) const {return omnetpp::exponential(getRNG(rng), mean);};
646
650 virtual SimTime exponential(SimTime mean, int rng=0) const {return exponential(mean.dbl(), rng);}
651
660 virtual double normal(double mean, double stddev, int rng=0) const {return omnetpp::normal(getRNG(rng), mean, stddev);};
661
665 virtual SimTime normal(SimTime mean, SimTime stddev, int rng=0) const {return normal(mean.dbl(), stddev.dbl(), rng);}
666
682 virtual double truncnormal(double mean, double stddev, int rng=0) const {return omnetpp::truncnormal(getRNG(rng), mean, stddev);};
683
687 virtual SimTime truncnormal(SimTime mean, SimTime stddev, int rng=0) const {return truncnormal(mean.dbl(), stddev.dbl(), rng);}
688
724 virtual double gamma_d(double alpha, double theta, int rng=0) const {return omnetpp::gamma_d(getRNG(rng), alpha, theta);};
725
738 virtual double beta(double alpha1, double alpha2, int rng=0) const {return omnetpp::beta(getRNG(rng), alpha1, alpha2);};
739
758 virtual double erlang_k(unsigned int k, double mean, int rng=0) const {return omnetpp::erlang_k(getRNG(rng), k, mean);};
759
775 virtual double chi_square(unsigned int k, int rng=0) const {return omnetpp::chi_square(getRNG(rng), k);};
776
788 virtual double student_t(unsigned int i, int rng=0) const {return omnetpp::student_t(getRNG(rng), i);};
789
804 virtual double cauchy(double a, double b, int rng=0) const {return omnetpp::cauchy(getRNG(rng), a, b);};
805
815 virtual double triang(double a, double b, double c, int rng=0) const {return omnetpp::triang(getRNG(rng), a, b, c);};
816
828 virtual double lognormal(double m, double w, int rng=0) const {return omnetpp::lognormal(getRNG(rng), m, w);}
829
849 virtual double weibull(double a, double b, int rng=0) const {return omnetpp::weibull(getRNG(rng), a, b);};
850
860 virtual double pareto_shifted(double a, double b, double c, int rng=0) const {return omnetpp::pareto_shifted(getRNG(rng), a, b, c);};
862
865
873 virtual int intuniform(int a, int b, int rng=0) const {return omnetpp::intuniform(getRNG(rng), a, b);};
874
882 virtual int intuniformexcl(int a, int b, int rng=0) const {return omnetpp::intuniformexcl(getRNG(rng), a, b);};
883
893 virtual int bernoulli(double p, int rng=0) const {return omnetpp::bernoulli(getRNG(rng), p);};
894
907 virtual int binomial(int n, double p, int rng=0) const {return omnetpp::binomial(getRNG(rng), n, p);};
908
921 virtual int geometric(double p, int rng=0) const {return omnetpp::geometric(getRNG(rng), p);};
922
935 virtual int negbinomial(int n, double p, int rng=0) const {return omnetpp::negbinomial(getRNG(rng), n, p);};
936
952 virtual int poisson(double lambda, int rng=0) const {return omnetpp::poisson(getRNG(rng), lambda);};
954
957
971 static simsignal_t registerSignal(const char *name);
972
977 static const char *getSignalName(simsignal_t signalID);
978
984 virtual void emit(simsignal_t signalID, bool b, cObject *details = nullptr);
985
991 virtual void emit(simsignal_t signalID, double d, cObject *details = nullptr);
992
998 virtual void emit(simsignal_t signalID, const SimTime& t, cObject *details = nullptr);
999
1006 virtual void emit(simsignal_t signalID, const char *s, cObject *details = nullptr);
1007
1013 virtual void emit(simsignal_t signalID, cObject *obj, cObject *details = nullptr);
1014
1016 virtual void emit(simsignal_t signalID, const cObject *obj, cObject *details = nullptr) { emit(signalID, const_cast<cObject *>(obj), details); }
1017
1019 virtual void emit(simsignal_t signalID, char c, cObject *details = nullptr) {doEmit(signalID,(intval_t)c, details);}
1020
1022 virtual void emit(simsignal_t signalID, unsigned char c, cObject *details = nullptr) {doEmit(signalID,(uintval_t)c, details);}
1023
1025 virtual void emit(simsignal_t signalID, short i, cObject *details = nullptr) {doEmit(signalID,(intval_t)i, details);}
1026
1028 virtual void emit(simsignal_t signalID, unsigned short i, cObject *details = nullptr) {doEmit(signalID,(uintval_t)i, details);}
1029
1031 virtual void emit(simsignal_t signalID, int i, cObject *details = nullptr) {doEmit(signalID,(intval_t)i, details);}
1032
1034 virtual void emit(simsignal_t signalID, unsigned int i, cObject *details = nullptr) {doEmit(signalID,(uintval_t)i, details);}
1035
1037 virtual void emit(simsignal_t signalID, long i, cObject *details = nullptr) {doEmit(signalID,(intval_t)i, details);}
1038
1040 virtual void emit(simsignal_t signalID, unsigned long i, cObject *details = nullptr) {doEmit(signalID,(uintval_t)i, details);}
1041
1043 virtual void emit(simsignal_t signalID, long long i, cObject *details = nullptr) {doEmit(signalID,(intval_t)i, details);}
1044
1046 virtual void emit(simsignal_t signalID, unsigned long long i, cObject *details = nullptr) {doEmit(signalID,(uintval_t)i, details);}
1047
1049 virtual void emit(simsignal_t signalID, float f, cObject *details = nullptr) {emit(signalID,(double)f, details);}
1050
1052 virtual void emit(simsignal_t signalID, long double d, cObject *details = nullptr) {emit(signalID,(double)d, details);}
1053
1060 bool mayHaveListeners(simsignal_t signalID) const {
1061 if (signalID < 0 || signalID > lastSignalID)
1062 throwInvalidSignalID(signalID);
1063 return signalListenerCounts[signalID] > 0;
1064 }
1065
1075 bool hasListeners(simsignal_t signalID) const;
1077
1080
1087 virtual void subscribe(simsignal_t signalID, cIListener *listener);
1088
1093 virtual void subscribe(const char *signalName, cIListener *listener);
1094
1099 virtual void unsubscribe(simsignal_t signalID, cIListener *listener);
1100
1105 virtual void unsubscribe(const char *signalName, cIListener *listener);
1106
1112 virtual bool isSubscribed(simsignal_t signalID, cIListener *listener) const;
1113
1118 virtual bool isSubscribed(const char *signalName, cIListener *listener) const;
1119
1123 virtual std::vector<simsignal_t> getLocalListenedSignals() const;
1124
1128 virtual std::vector<cIListener*> getLocalSignalListeners(simsignal_t signalID) const;
1130
1133
1142 virtual bool hasGUI() const;
1143
1149
1153 virtual void setDisplayString(const char *dispstr);
1154
1159 virtual void bubble(const char *text) const;
1160
1173 virtual std::string resolveResourcePath(const char *fileName) const;
1175
1178
1182 virtual void recordScalar(const char *name, double value, const char *unit=nullptr);
1183
1187 virtual void recordScalar(const char *name, SimTime value, const char *unit=nullptr) {recordScalar(name, value.dbl(), unit);}
1188
1194 virtual void recordStatistic(cStatistic *stats, const char *unit=nullptr);
1195
1201 virtual void recordStatistic(const char *name, cStatistic *stats, const char *unit=nullptr);
1203};
1204
1205} // namespace omnetpp
1206
1207
1208#endif
1209
int64_t-based, base-10 fixed-point simulation time.
Definition simtime.h:67
double dbl() const
Definition simtime.h:346
Common base class for cModuleType and cChannelType.
Definition ccomponenttype.h:50
virtual void subscribe(const char *signalName, cIListener *listener)
virtual double lognormal(double m, double w, int rng=0) const
Definition ccomponent.h:828
virtual bool hasGUI() const
virtual void emit(simsignal_t signalID, short i, cObject *details=nullptr)
Definition ccomponent.h:1025
virtual double triang(double a, double b, double c, int rng=0) const
Definition ccomponent.h:815
virtual void subscribe(simsignal_t signalID, cIListener *listener)
virtual void recordStatistic(cStatistic *stats, const char *unit=nullptr)
virtual cRNG * getRNG(int k) const
virtual int negbinomial(int n, double p, int rng=0) const
Definition ccomponent.h:935
virtual cPar & par(int k)
bool mayHaveListeners(simsignal_t signalID) const
Definition ccomponent.h:1060
virtual cModule * getSystemModule() const
const cPar & par(int k) const
Definition ccomponent.h:571
virtual void unsubscribe(const char *signalName, cIListener *listener)
virtual double weibull(double a, double b, int rng=0) const
Definition ccomponent.h:849
virtual cModule * getModuleByPath(const char *path) const
virtual void emit(simsignal_t signalID, long i, cObject *details=nullptr)
Definition ccomponent.h:1037
virtual SimTime exponential(SimTime mean, int rng=0) const
Definition ccomponent.h:650
virtual void initialize(int stage)
Definition ccomponent.h:264
virtual std::vector< cIListener * > getLocalSignalListeners(simsignal_t signalID) const
virtual cDisplayString & getDisplayString() const
virtual cModule * findModuleByPath(const char *path) const
virtual void emit(simsignal_t signalID, char c, cObject *details=nullptr)
Definition ccomponent.h:1019
cSimulation * getSimulation() const
Definition ccomponent.h:426
int getId() const
Definition ccomponent.h:435
virtual const char * getNedTypeName() const
virtual double pareto_shifted(double a, double b, double c, int rng=0) const
Definition ccomponent.h:860
virtual int bernoulli(double p, int rng=0) const
Definition ccomponent.h:893
virtual double cauchy(double a, double b, int rng=0) const
Definition ccomponent.h:804
virtual void emit(simsignal_t signalID, long double d, cObject *details=nullptr)
Definition ccomponent.h:1052
virtual void emit(simsignal_t signalID, float f, cObject *details=nullptr)
Definition ccomponent.h:1049
virtual void handleParameterChange(const char *parname)
virtual std::string getNedTypeAndFullPath() const
virtual int poisson(double lambda, int rng=0) const
Definition ccomponent.h:952
virtual void emit(simsignal_t signalID, const char *s, cObject *details=nullptr)
virtual double student_t(unsigned int i, int rng=0) const
Definition ccomponent.h:788
virtual ComponentKind getComponentKind() const =0
virtual void emit(simsignal_t signalID, unsigned long i, cObject *details=nullptr)
Definition ccomponent.h:1040
virtual double uniform(double a, double b, int rng=0) const
Definition ccomponent.h:631
virtual void preDelete(cComponent *root)
virtual double beta(double alpha1, double alpha2, int rng=0) const
Definition ccomponent.h:738
virtual void setDisplayName(const char *name)
virtual void refreshDisplay() const
virtual SimTime uniform(SimTime a, SimTime b, int rng=0) const
Definition ccomponent.h:636
virtual SimTime normal(SimTime mean, SimTime stddev, int rng=0) const
Definition ccomponent.h:665
virtual void initialize()
virtual int geometric(double p, int rng=0) const
Definition ccomponent.h:921
virtual void emit(simsignal_t signalID, unsigned char c, cObject *details=nullptr)
Definition ccomponent.h:1022
virtual void emit(simsignal_t signalID, cObject *obj, cObject *details=nullptr)
virtual void callInitialize()=0
virtual int intuniformexcl(int a, int b, int rng=0) const
Definition ccomponent.h:882
virtual void emit(simsignal_t signalID, long long i, cObject *details=nullptr)
Definition ccomponent.h:1043
bool hasListeners(simsignal_t signalID) const
virtual cModule * getParentModule() const =0
virtual int numInitStages() const
Definition ccomponent.h:271
virtual SimTime truncnormal(SimTime mean, SimTime stddev, int rng=0) const
Definition ccomponent.h:687
virtual int intuniform(int a, int b, int rng=0) const
Definition ccomponent.h:873
virtual void callFinish()=0
virtual void emit(simsignal_t signalID, const SimTime &t, cObject *details=nullptr)
virtual void emit(simsignal_t signalID, unsigned int i, cObject *details=nullptr)
Definition ccomponent.h:1034
bool isModule() const
Definition ccomponent.h:472
virtual void finalizeParameters()
const cPar & par(const char *parname) const
Definition ccomponent.h:583
cComponent(const char *name=nullptr)
virtual double normal(double mean, double stddev, int rng=0) const
Definition ccomponent.h:660
virtual double chi_square(unsigned int k, int rng=0) const
Definition ccomponent.h:775
virtual std::vector< simsignal_t > getLocalListenedSignals() const
virtual double erlang_k(unsigned int k, double mean, int rng=0) const
Definition ccomponent.h:758
bool isChannel() const
Definition ccomponent.h:477
virtual void setDisplayString(const char *dispstr)
virtual cProperties * getProperties() const =0
virtual double exponential(double mean, int rng=0) const
Definition ccomponent.h:645
bool hasPar(const char *s) const
Definition ccomponent.h:594
virtual std::string resolveResourcePath(const char *fileName) const
virtual void bubble(const char *text) const
virtual void unsubscribe(simsignal_t signalID, cIListener *listener)
virtual std::string getNedTypeAndFullName() const
virtual bool callInitialize(int stage)=0
static const char * getSignalName(simsignal_t signalID)
virtual void recordScalar(const char *name, double value, const char *unit=nullptr)
virtual void forEachChild(cVisitor *v) override
virtual void emit(simsignal_t signalID, unsigned short i, cObject *details=nullptr)
Definition ccomponent.h:1028
virtual bool isSubscribed(simsignal_t signalID, cIListener *listener) const
virtual void emit(simsignal_t signalID, const cObject *obj, cObject *details=nullptr)
Definition ccomponent.h:1016
virtual double truncnormal(double mean, double stddev, int rng=0) const
Definition ccomponent.h:682
virtual int binomial(int n, double p, int rng=0) const
Definition ccomponent.h:907
virtual double dblrand(int rng=0) const
Definition ccomponent.h:619
virtual cPar & par(const char *parname)
virtual void emit(simsignal_t signalID, bool b, cObject *details=nullptr)
virtual void finish()
virtual uint32_t intrand(uint32_t r, int rng=0) const
Definition ccomponent.h:614
virtual cComponentType * getComponentType() const
virtual void emit(simsignal_t signalID, unsigned long long i, cObject *details=nullptr)
Definition ccomponent.h:1046
virtual int getNumRNGs() const
virtual int findPar(const char *parname) const
static simsignal_t registerSignal(const char *name)
virtual double gamma_d(double alpha, double theta, int rng=0) const
Definition ccomponent.h:724
virtual void emit(simsignal_t signalID, int i, cObject *details=nullptr)
Definition ccomponent.h:1031
virtual bool isSubscribed(const char *signalName, cIListener *listener) const
virtual void recordStatistic(const char *name, cStatistic *stats, const char *unit=nullptr)
virtual int getNumParams() const
Definition ccomponent.h:559
virtual const char * getDisplayName() const
Definition ccomponent.h:416
virtual void recordScalar(const char *name, SimTime value, const char *unit=nullptr)
Definition ccomponent.h:1187
const cComponent * getThisPtr() const
Definition ccomponent.h:384
virtual void emit(simsignal_t signalID, double d, cObject *details=nullptr)
Represents a display string.
Definition cdisplaystring.h:69
Interface for listeners in a simulation model.
Definition clistener.h:72
A collection of properties (cProperty).
Definition cproperties.h:35
Abstract interface for random number generator classes.
Definition crng.h:49
Abstract base class for result recorders.
Definition cresultrecorder.h:71
The default implementation of cIRngManager.
Definition crngmanager.h:127
virtual std::string str() const override
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
Internal class that stores values for cPar objects.
Definition cparimpl.h:47
Definition opp_pooledstring.h:64
LogLevel
Classifies log messages based on detail and importance.
Definition clog.h:34
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
SIM_API double student_t(cRNG *rng, unsigned int i)
Returns a random variate from the student-t distribution with i degrees of freedom....
SIM_API double exponential(cRNG *rng, double mean)
Returns a random variate from the exponential distribution with the given mean (that is,...
SIM_API double pareto_shifted(cRNG *rng, double a, double b, double c)
Returns a random variate from the shifted generalized Pareto distribution.
SIM_API double uniform(cRNG *rng, double a, double b)
Returns a random variate with uniform distribution in the range [a,b).
double lognormal(cRNG *rng, double m, double w)
Returns a random variate from the lognormal distribution with "scale" parameter m and "shape" paramet...
Definition distrib.h:251
SIM_API double truncnormal(cRNG *rng, double mean, double stddev)
Normal distribution truncated to nonnegative values.
SIM_API double erlang_k(cRNG *rng, unsigned int k, double mean)
Returns a random variate from the Erlang distribution with k phases and mean mean.
SIM_API double beta(cRNG *rng, double alpha1, double alpha2)
Returns a random variate from the beta distribution with parameters alpha1, alpha2.
SIM_API double gamma_d(cRNG *rng, double alpha, double theta)
Returns a random variate from the gamma distribution with parameters alpha>0, theta>0....
SIM_API double triang(cRNG *rng, double a, double b, double c)
Returns a random variate from the triangular distribution with parameters a <= b <= c.
SIM_API double weibull(cRNG *rng, double a, double b)
Returns a random variate from the Weibull distribution with parameters a, b > 0, where a is the "scal...
SIM_API double chi_square(cRNG *rng, unsigned int k)
Returns a random variate from the chi-square distribution with k degrees of freedom.
SIM_API double cauchy(cRNG *rng, double a, double b)
Returns a random variate from the Cauchy distribution (also called Lorentzian distribution) with para...
SIM_API double normal(cRNG *rng, double mean, double stddev)
Returns a random variate from the normal distribution with the given mean and standard deviation.
int bernoulli(cRNG *rng, double p)
Returns the result of a Bernoulli trial with probability p, that is, 1 with probability p and 0 with ...
Definition distrib.h:324
SIM_API int intuniform(cRNG *rng, int a, int b)
Returns a random integer with uniform distribution in the range [a,b], inclusive. (Note that the func...
SIM_API int binomial(cRNG *rng, int n, double p)
Returns a random integer from the binomial distribution with parameters n and p, that is,...
SIM_API int negbinomial(cRNG *rng, int n, double p)
Returns a random integer from the negative binomial distribution with parameters n and p,...
SIM_API int poisson(cRNG *rng, double lambda)
Returns a random integer from the Poisson distribution with parameter lambda, that is,...
SIM_API int intuniformexcl(cRNG *rng, int a, int b)
Returns a random integer with uniform distribution over [a,b), that is, from [a,b-1].
SIM_API int geometric(cRNG *rng, double p)
Returns a random integer from the geometric distribution with parameter p, that is,...
int simsignal_t
Signal handle.
Definition clistener.h:37