OMNeT++ Simulation Library  5.4.1
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 "simkerneldefs.h"
21 #include "cownedobject.h"
22 #include "cpar.h"
23 #include "cdefaultlist.h"
24 #include "simtime.h"
25 #include "cenvir.h"
26 #include "clistener.h"
27 #include "clog.h"
28 #include "distrib.h"
29 
30 namespace omnetpp {
31 
32 class cComponentType;
33 class cProperties;
34 class cDisplayString;
35 class cRNG;
36 class cStatistic;
37 class cResultRecorder;
38 
48 class SIM_API cComponent : public cDefaultList //implies noncopyable
49 {
50  friend class cComponentDescriptor; // listener lists, etc
51  friend class cComponent__SignalListenerListDescriptor; // sim_std.msg
52  friend class cPar; // needs to call handleParameterChange()
53  friend class cChannel; // allow it to access FL_INITIALIZED and releaseLocalListeners()
54  friend class cModule; // allow it to access FL_INITIALIZED, releaseLocalListeners() and repairSignalFlags()
55  friend class cGate; // because of repairSignalFlags()
56  friend class cSimulation; // sets componentId
57  friend class cResultListener; // invalidateCachedResultRecorderLists()
58  public:
59  enum ComponentKind { KIND_MODULE, KIND_CHANNEL, KIND_OTHER };
60 
61  private:
62  enum {
63  FL_PARAMSFINALIZED = 1 << 2, // whether finalizeParameters() has been called
64  FL_INITIALIZED = 1 << 3, // whether initialize() has been called
65  FL_DISPSTR_CHECKED = 1 << 4, // for hasDisplayString(): whether the FL_DISPSTR_NOTEMPTY flag is valid
66  FL_DISPSTR_NOTEMPTY = 1 << 5, // for hasDisplayString(): whether the display string is not empty
67  FL_LOGLEVEL_SHIFT = 6, // 3 bits wide
68  };
69 
70  private:
71  cComponentType *componentType; // component type object
72  int componentId; // id in cSimulation
73 
74  short rngMapSize; // size of the rngMap array (RNGs with index >= rngMapSize are mapped one-to-one to global RNGs)
75  int *rngMap; // maps local RNG numbers (may be nullptr if rngMapSize==0)
76 
77  short numPars;
78  short parArraySize;
79  cPar *parArray; // array of cPar objects
80 
81  mutable cDisplayString *displayString; // created on demand
82 
83  struct SignalListenerList {
84  simsignal_t signalID;
85  cIListener **listeners; // nullptr-terminated array
86 
87  SignalListenerList() {signalID=SIMSIGNAL_NULL; listeners=nullptr;}
88  const char *getSignalName() const;
89  std::string str() const;
90  void dispose() {delete [] listeners;}
91  bool addListener(cIListener *l);
92  bool removeListener(cIListener *l);
93  int findListener(cIListener *l) const;
94  bool hasListener() const {return listeners && listeners[0];}
95  int countListeners() const;
96  cIListener *getListener(int k) const {return listeners[k];} // unsafe
97  static bool gt(const SignalListenerList& e1, const SignalListenerList& e2) {return e1.signalID > e2.signalID;}
98  };
99 
100  typedef std::vector<SignalListenerList> SignalTable;
101  SignalTable *signalTable; // ordered by signalID so we can do binary search
102 
103  // string-to-simsignal_t mapping
104  static struct SignalNameMapping {
105  std::map<std::string,simsignal_t> signalNameToID;
106  std::map<simsignal_t,std::string> signalIDToName;
107  } *signalNameMapping; // must be dynamically allocated on first access so that registerSignal() can be invoked from static initialization code
108  static int lastSignalID;
109 
110  // for hasListeners()/mayHaveListeners()
111  static std::vector<int> signalListenerCounts; // index: signalID, value: number of listeners anywhere
112 
113  // stack of listener lists being notified, to detect concurrent modification
114  static cIListener **notificationStack[];
115  static int notificationSP;
116 
117  // whether only signals declared in NED via @signal are allowed to be emitted
118  static bool checkSignals;
119 
120  // for caching the result of getResultRecorders()
121  struct ResultRecorderList {
122  const cComponent *component;
123  std::vector<cResultRecorder*> recorders;
124  };
125 
126  // for getResultRecorders(); static because we don't want to increase cComponent's size
127  static std::vector<ResultRecorderList*> cachedResultRecorderLists;
128 
129  private:
130  SignalListenerList *findListenerList(simsignal_t signalID) const;
131  SignalListenerList *findOrCreateListenerList(simsignal_t signalID);
132  void throwInvalidSignalID(simsignal_t signalID) const;
133  void removeListenerList(simsignal_t signalID);
134  void checkNotFiring(simsignal_t, cIListener **listenerList);
135  template<typename T> void fire(cComponent *src, simsignal_t signalID, T x, cObject *details);
136  void fireFinish();
137  void releaseLocalListeners();
138  const SignalListenerList& getListenerList(int k) const {return (*signalTable)[k];} // for inspectors
139  int getSignalTableSize() const {return signalTable ? signalTable->size() : 0;} // for inspectors
140  void collectResultRecorders(std::vector<cResultRecorder*>& result) const;
141 
142  public:
143  // internal: used by log mechanism
144  LogLevel getLogLevel() const { return (LogLevel)((flags >> FL_LOGLEVEL_SHIFT) & 0x7); }
145  virtual void setLogLevel(LogLevel logLevel);
146 
147  // internal: invoked from within cEnvir::preconfigure(component)
148  virtual void setRNGMap(short size, int *map) {rngMapSize=size; rngMap=map;}
149 
150  // internal: sets associated cComponentType for the component;
151  // called as part of the creation process.
152  virtual void setComponentType(cComponentType *componenttype);
153 
154  // internal: adds a new parameter to the component; called as part of the creation process
155  virtual void addPar(cParImpl *value);
156 
157  // internal: reallocates paramv (size must be >= numparams)
158  void reallocParamv(int size);
159 
160  // internal: save parameters marked with "save-as-scalars=true"
161  virtual void recordParametersAsScalars();
162 
163  // internal: has finalizeParameters() been called?
164  bool parametersFinalized() const {return flags&FL_PARAMSFINALIZED;}
165 
166  // internal: sets up @statistic-based result recording
167  virtual void addResultRecorders();
168 
169  // internal: has initialize() been called?
170  bool initialized() const {return flags&FL_INITIALIZED;}
171 
172  // internal: calls refreshDisplay() recursively
173  virtual void callRefreshDisplay() = 0;
174 
175  // internal: used from Tkenv: find out if this module has a display string.
176  // getDisplayString() would create the object immediately which we want to avoid.
177  bool hasDisplayString();
178 
179  // internal: clears per-run signals-related data structures; to be invoked before each simulation run
180  static void clearSignalState();
181 
182  // internal: clears signal registrations; to be invoked on exit
183  static void clearSignalRegistrations();
184 
185  // internal: allocates a signalHasLocalListeners/signalHasAncestorListeners bit index to the
186  // given signal and returns the corresponding mask (1<<index); returns 0 if there are no more
187  // free bit indices. Result is remembered and returned in subsequent calls (until clearSignalState())
188  static uint64_t getSignalMask(simsignal_t signalID);
189 
190  // internal: controls whether signals should be validated against @signal declarations in NED files
191  static void setCheckSignals(bool b) {checkSignals = b;}
192  static bool getCheckSignals() {return checkSignals;}
193 
194  // internal: for inspectors
195  const std::vector<cResultRecorder*>& getResultRecorders() const;
196  static void invalidateCachedResultRecorderLists();
197 
198  protected:
218 
223  virtual void initialize(int stage) {if (stage==0) initialize();}
224 
230  virtual int numInitStages() const {return 1;}
231 
236  virtual void initialize();
237 
242  virtual void finish();
243 
262  virtual void handleParameterChange(const char *parname);
263 
290  virtual void refreshDisplay() const;
292 
293  public:
303  cComponent(const char *name = nullptr);
304 
308  virtual ~cComponent();
310 
316  virtual void forEachChild(cVisitor *v) override;
317 
322  const cComponent *getThisPtr() const {return this;} //Note: nonvirtual
324 
332  virtual void finalizeParameters();
333 
340  virtual cProperties *getProperties() const = 0;
341 
345  virtual cComponentType *getComponentType() const;
346 
352  cSimulation *getSimulation() const;
353 
361  int getId() const {return componentId;}
362 
370  virtual const char *getNedTypeName() const;
371 
377  virtual ComponentKind getComponentKind() const = 0;
378 
382  bool isModule() const {return getComponentKind() == KIND_MODULE;}
383 
387  bool isChannel() const {return getComponentKind() == KIND_CHANNEL;}
388 
394  virtual cModule *getParentModule() const = 0;
395 
400  virtual cModule *getSystemModule() const;
402 
408 
412  virtual void callInitialize() = 0;
413 
418  virtual bool callInitialize(int stage) = 0;
419 
424  virtual void callFinish() = 0;
426 
429 
433  virtual int getNumParams() const {return numPars;}
434 
439  virtual cPar& par(int k);
440 
445  const cPar& par(int k) const {return const_cast<cComponent *>(this)->par(k);}
446 
451  virtual cPar& par(const char *parname);
452 
457  const cPar& par(const char *parname) const {return const_cast<cComponent *>(this)->par(parname);}
458 
463  virtual int findPar(const char *parname) const;
464 
468  bool hasPar(const char *s) const {return findPar(s)>=0;}
470 
473 
478  virtual cRNG *getRNG(int k) const;
479 
483  virtual unsigned long intrand(long r, int rng=0) const {return getRNG(rng)->intRand(r);}
484 
488  virtual double dblrand(int rng=0) const {return getRNG(rng)->doubleRand();}
490 
493 
500  virtual double uniform(double a, double b, int rng=0) const {return omnetpp::uniform(getRNG(rng), a, b);}
501 
505  virtual SimTime uniform(SimTime a, SimTime b, int rng=0) const {return uniform(a.dbl(), b.dbl(), rng);}
506 
514  virtual double exponential(double mean, int rng=0) const {return omnetpp::exponential(getRNG(rng), mean);};
515 
519  virtual SimTime exponential(SimTime mean, int rng=0) const {return exponential(mean.dbl(), rng);}
520 
529  virtual double normal(double mean, double stddev, int rng=0) const {return omnetpp::normal(getRNG(rng), mean, stddev);};
530 
534  virtual SimTime normal(SimTime mean, SimTime stddev, int rng=0) const {return normal(mean.dbl(), stddev.dbl(), rng);}
535 
551  virtual double truncnormal(double mean, double stddev, int rng=0) const {return omnetpp::truncnormal(getRNG(rng), mean, stddev);};
552 
556  virtual SimTime truncnormal(SimTime mean, SimTime stddev, int rng=0) const {return truncnormal(mean.dbl(), stddev.dbl(), rng);}
557 
593  virtual double gamma_d(double alpha, double theta, int rng=0) const {return omnetpp::gamma_d(getRNG(rng), alpha, theta);};
594 
607  virtual double beta(double alpha1, double alpha2, int rng=0) const {return omnetpp::beta(getRNG(rng), alpha1, alpha2);};
608 
627  virtual double erlang_k(unsigned int k, double mean, int rng=0) const {return omnetpp::erlang_k(getRNG(rng), k, mean);};
628 
644  virtual double chi_square(unsigned int k, int rng=0) const {return omnetpp::chi_square(getRNG(rng), k);};
645 
657  virtual double student_t(unsigned int i, int rng=0) const {return omnetpp::student_t(getRNG(rng), i);};
658 
673  virtual double cauchy(double a, double b, int rng=0) const {return omnetpp::cauchy(getRNG(rng), a, b);};
674 
684  virtual double triang(double a, double b, double c, int rng=0) const {return omnetpp::triang(getRNG(rng), a, b, c);};
685 
697  virtual double lognormal(double m, double w, int rng=0) const {return omnetpp::lognormal(getRNG(rng), m, w);}
698 
718  virtual double weibull(double a, double b, int rng=0) const {return omnetpp::weibull(getRNG(rng), a, b);};
719 
729  virtual double pareto_shifted(double a, double b, double c, int rng=0) const {return omnetpp::pareto_shifted(getRNG(rng), a, b, c);};
731 
734 
742  virtual int intuniform(int a, int b, int rng=0) const {return omnetpp::intuniform(getRNG(rng), a, b);};
743 
753  virtual int bernoulli(double p, int rng=0) const {return omnetpp::bernoulli(getRNG(rng), p);};
754 
767  virtual int binomial(int n, double p, int rng=0) const {return omnetpp::binomial(getRNG(rng), n, p);};
768 
781  virtual int geometric(double p, int rng=0) const {return omnetpp::geometric(getRNG(rng), p);};
782 
795  virtual int negbinomial(int n, double p, int rng=0) const {return omnetpp::negbinomial(getRNG(rng), n, p);};
796 
812  virtual int poisson(double lambda, int rng=0) const {return omnetpp::poisson(getRNG(rng), lambda);};
814 
831  static simsignal_t registerSignal(const char *name);
832 
837  static const char *getSignalName(simsignal_t signalID);
838 
844  virtual void emit(simsignal_t signalID, bool b, cObject *details = nullptr);
845 
851  virtual void emit(simsignal_t signalID, long l, cObject *details = nullptr);
852 
858  virtual void emit(simsignal_t signalID, unsigned long l, cObject *details = nullptr);
859 
865  virtual void emit(simsignal_t signalID, double d, cObject *details = nullptr);
866 
872  virtual void emit(simsignal_t signalID, const SimTime& t, cObject *details = nullptr);
873 
879  virtual void emit(simsignal_t signalID, const char *s, cObject *details = nullptr);
880 
886  virtual void emit(simsignal_t signalID, cObject *obj, cObject *details = nullptr);
887 
889  virtual void emit(simsignal_t signalID, const cObject *obj, cObject *details = nullptr) { emit(signalID, const_cast<cObject *>(obj), details); }
890 
892  virtual void emit(simsignal_t signalID, char c, cObject *details = nullptr) {emit(signalID,(long)c, details);}
893 
895  virtual void emit(simsignal_t signalID, unsigned char c, cObject *details = nullptr) {emit(signalID,(unsigned long)c, details);}
896 
898  virtual void emit(simsignal_t signalID, short i, cObject *details = nullptr) {emit(signalID,(long)i, details);}
899 
901  virtual void emit(simsignal_t signalID, unsigned short i, cObject *details = nullptr) {emit(signalID,(unsigned long)i, details);}
902 
904  virtual void emit(simsignal_t signalID, int i, cObject *details = nullptr) {emit(signalID,(long)i, details);}
905 
907  virtual void emit(simsignal_t signalID, unsigned int i, cObject *details = nullptr) {emit(signalID,(unsigned long)i, details);}
908 
910  virtual void emit(simsignal_t signalID, float f, cObject *details = nullptr) {emit(signalID,(double)f, details);}
911 
913  virtual void emit(simsignal_t signalID, long double d, cObject *details = nullptr) {emit(signalID,(double)d, details);}
914 
921  bool mayHaveListeners(simsignal_t signalID) const {
922  if (signalID < 0 || signalID > lastSignalID)
923  throwInvalidSignalID(signalID);
924  return signalListenerCounts[signalID] > 0;
925  }
926 
936  bool hasListeners(simsignal_t signalID) const;
938 
948  virtual void subscribe(simsignal_t signalID, cIListener *listener);
949 
954  virtual void subscribe(const char *signalName, cIListener *listener);
955 
960  virtual void unsubscribe(simsignal_t signalID, cIListener *listener);
961 
966  virtual void unsubscribe(const char *signalName, cIListener *listener);
967 
973  virtual bool isSubscribed(simsignal_t signalID, cIListener *listener) const;
974 
979  virtual bool isSubscribed(const char *signalName, cIListener *listener) const;
980 
984  virtual std::vector<simsignal_t> getLocalListenedSignals() const;
985 
989  virtual std::vector<cIListener*> getLocalSignalListeners(simsignal_t signalID) const;
991 
1003  virtual bool hasGUI() const;
1004 
1009  virtual cDisplayString& getDisplayString() const;
1010 
1014  virtual void setDisplayString(const char *dispstr);
1015 
1020  virtual void bubble(const char *text) const;
1021 
1034  virtual std::string resolveResourcePath(const char *fileName) const;
1036 
1039 
1043  virtual void recordScalar(const char *name, double value, const char *unit=nullptr);
1044 
1048  virtual void recordScalar(const char *name, SimTime value, const char *unit=nullptr) {recordScalar(name, value.dbl(), unit);}
1049 
1055  virtual void recordStatistic(cStatistic *stats, const char *unit=nullptr);
1056 
1062  virtual void recordStatistic(const char *name, cStatistic *stats, const char *unit=nullptr);
1064 };
1065 
1066 } // namespace omnetpp
1067 
1068 
1069 #endif
1070 
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...
virtual double weibull(double a, double b, int rng=0) const
Definition: ccomponent.h:718
Internal class, used as a base class for modules and channels. It is not intended for subclassing out...
Definition: cdefaultlist.h:33
virtual unsigned long intRand()=0
Common base for module and channel classes.
Definition: ccomponent.h:48
Represents a module gate.
Definition: cgate.h:63
SIM_API double cauchy(cRNG *rng, double a, double b)
Returns a random variate from the Cauchy distribution (also called Lorentzian distribution) with para...
Root of the OMNeT++ class hierarchy. cObject is a lightweight class without any data members...
Definition: cobject.h:58
virtual void emit(simsignal_t signalID, short i, cObject *details=nullptr)
Definition: ccomponent.h:898
int64_t-based, base-10 fixed-point simulation time.
Definition: simtime.h:66
SIM_API double truncnormal(cRNG *rng, double mean, double stddev)
Normal distribution truncated to nonnegative values.
virtual SimTime uniform(SimTime a, SimTime b, int rng=0) const
Definition: ccomponent.h:505
SIM_API double pareto_shifted(cRNG *rng, double a, double b, double c)
Returns a random variate from the shifted generalized Pareto distribution.
virtual void emit(simsignal_t signalID, char c, cObject *details=nullptr)
Definition: ccomponent.h:892
virtual void emit(simsignal_t signalID, unsigned short i, cObject *details=nullptr)
Definition: ccomponent.h:901
virtual double gamma_d(double alpha, double theta, int rng=0) const
Definition: ccomponent.h:593
virtual int numInitStages() const
Definition: ccomponent.h:230
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...
bool mayHaveListeners(simsignal_t signalID) const
Definition: ccomponent.h:921
SIM_API double student_t(cRNG *rng, unsigned int i)
Returns a random variate from the student-t distribution with i degrees of freedom. If Y1 has a normal distribution and Y2 has a chi-square distribution with k degrees of freedom then X = Y1 / sqrt(Y2/k) has a student-t distribution with k degrees of freedom.
SIM_API double chi_square(cRNG *rng, unsigned int k)
Returns a random variate from the chi-square distribution with k degrees of freedom.
LogLevel
Classifies log messages based on detail and importance.
Definition: clog.h:33
virtual void emit(simsignal_t signalID, unsigned char c, cObject *details=nullptr)
Definition: ccomponent.h:895
Abstract interface for random number generator classes.
Definition: crng.h:49
virtual double erlang_k(unsigned int k, double mean, int rng=0) const
Definition: ccomponent.h:627
virtual int bernoulli(double p, int rng=0) const
Definition: ccomponent.h:753
Simulation manager class.
Definition: csimulation.h:62
const cPar & par(const char *parname) const
Definition: ccomponent.h:457
virtual void initialize(int stage)
Definition: ccomponent.h:223
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 geometric(cRNG *rng, double p)
Returns a random integer from the geometric distribution with parameter p, that is, the number of independent trials with probability p until the first success.
Represents a module or channel parameter.
Definition: cpar.h:68
SIM_API int negbinomial(cRNG *rng, int n, double p)
Returns a random integer from the negative binomial distribution with parameters n and p...
virtual void emit(simsignal_t signalID, float f, cObject *details=nullptr)
Definition: ccomponent.h:910
virtual void emit(simsignal_t signalID, int i, cObject *details=nullptr)
Definition: ccomponent.h:904
virtual double exponential(double mean, int rng=0) const
Definition: ccomponent.h:514
SIM_API int poisson(cRNG *rng, double lambda)
Returns a random integer from the Poisson distribution with parameter lambda, that is...
virtual double chi_square(unsigned int k, int rng=0) const
Definition: ccomponent.h:644
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...
virtual SimTime normal(SimTime mean, SimTime stddev, int rng=0) const
Definition: ccomponent.h:534
virtual double uniform(double a, double b, int rng=0) const
Definition: ccomponent.h:500
SIM_API double beta(cRNG *rng, double alpha1, double alpha2)
Returns a random variate from the beta distribution with parameters alpha1, alpha2.
virtual unsigned long intrand(long r, int rng=0) const
Definition: ccomponent.h:483
virtual int negbinomial(int n, double p, int rng=0) const
Definition: ccomponent.h:795
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:308
This class represents modules in the simulation.
Definition: cmodule.h:47
bool hasPar(const char *s) const
Definition: ccomponent.h:468
virtual int poisson(double lambda, int rng=0) const
Definition: ccomponent.h:812
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...
virtual double cauchy(double a, double b, int rng=0) const
Definition: ccomponent.h:673
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. Alpha is known as the "shape" parameter, and theta as the "scale" parameter.
virtual double doubleRand()=0
double dbl() const
Definition: simtime.h:301
const cPar & par(int k) const
Definition: ccomponent.h:445
virtual double beta(double alpha1, double alpha2, int rng=0) const
Definition: ccomponent.h:607
virtual double pareto_shifted(double a, double b, double c, int rng=0) const
Definition: ccomponent.h:729
virtual double student_t(unsigned int i, int rng=0) const
Definition: ccomponent.h:657
virtual double truncnormal(double mean, double stddev, int rng=0) const
Definition: ccomponent.h:551
virtual void recordScalar(const char *name, SimTime value, const char *unit=nullptr)
Definition: ccomponent.h:1048
Enables traversing the tree of (cObject-rooted) simulation objects.
Definition: cvisitor.h:56
virtual SimTime truncnormal(SimTime mean, SimTime stddev, int rng=0) const
Definition: ccomponent.h:556
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:244
Common base class for cModuleType and cChannelType.
Definition: ccomponenttype.h:49
Definition: cabstracthistogram.h:21
int getId() const
Definition: ccomponent.h:361
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.
A collection of properties (cProperty).
Definition: cproperties.h:34
virtual double normal(double mean, double stddev, int rng=0) const
Definition: ccomponent.h:529
Common abstract base class for result filters and result recorders.
Definition: cresultlistener.h:34
bool isModule() const
Definition: ccomponent.h:382
SIM_API double exponential(cRNG *rng, double mean)
Returns a random variate from the exponential distribution with the given mean (that is...
Represents a display string.
Definition: cdisplaystring.h:58
Interface for listeners in a simulation model.
Definition: clistener.h:66
virtual void emit(simsignal_t signalID, unsigned int i, cObject *details=nullptr)
Definition: ccomponent.h:907
virtual double lognormal(double m, double w, int rng=0) const
Definition: ccomponent.h:697
virtual double triang(double a, double b, double c, int rng=0) const
Definition: ccomponent.h:684
int simsignal_t
Signal handle.
Definition: clistener.h:24
virtual SimTime exponential(SimTime mean, int rng=0) const
Definition: ccomponent.h:519
virtual int geometric(double p, int rng=0) const
Definition: ccomponent.h:781
SIM_API double uniform(cRNG *rng, double a, double b)
Returns a random variate with uniform distribution in the range [a,b).
virtual int getNumParams() const
Definition: ccomponent.h:433
virtual int intuniform(int a, int b, int rng=0) const
Definition: ccomponent.h:742
Base class for channels.
Definition: cchannel.h:34
virtual int binomial(int n, double p, int rng=0) const
Definition: ccomponent.h:767
cStatistic is an abstract class for computing statistical properties of a random variable.
Definition: cstatistic.h:34
cSimulation * getSimulation()
Returns the currently active simulation.
Definition: csimulation.h:575
const cComponent * getThisPtr() const
Definition: ccomponent.h:322
bool isChannel() const
Definition: ccomponent.h:387
Internal class that stores values for cPar objects.
Definition: cparimpl.h:44
virtual double dblrand(int rng=0) const
Definition: ccomponent.h:488
virtual void emit(simsignal_t signalID, long double d, cObject *details=nullptr)
Definition: ccomponent.h:913
virtual void emit(simsignal_t signalID, const cObject *obj, cObject *details=nullptr)
Definition: ccomponent.h:889