OMNeT++ Simulation Library  5.4.1
cenvir.h
1 //==========================================================================
2 // CENVIR.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_CENVIR_H
17 #define __OMNETPP_CENVIR_H
18 
19 #include <sstream>
20 #include <iostream>
21 #include "simkerneldefs.h"
22 #include "simtime_t.h"
23 #include "opp_string.h"
24 #include "clistener.h" // for simsignal_t
25 #include "clifecyclelistener.h"
26 #include "ccanvas.h"
27 
28 namespace osg { class Node; }
29 
30 namespace omnetpp {
31 
32 class cObject;
33 class cOwnedObject;
34 class cLogEntry;
35 class cEvent;
36 class cMessage;
37 class cPar;
38 class cGate;
39 class cComponent;
40 class cComponentType;
41 class cModule;
42 class cSimpleModule;
43 class cStatistic;
44 class cProperty;
45 class cRNG;
46 class cXMLElement;
47 class cEnvir;
48 class cConfiguration;
49 class cConfigurationEx;
50 
51 using std::endl;
52 
53 // internal macro, usage: EVCB.beginSend(...)
54 #define EVCB cSimulation::getActiveEnvir()->suppressNotifications ? (void)0 : (*cSimulation::getActiveEnvir())
55 
73 class SIM_API cEnvir
74 {
75  friend class evbuf;
76  public:
77  // Internal flag for express mode.
78  bool loggingEnabled;
79 
80  // Internal flag. When set to true, the simulation kernel MAY omit calling
81  // the following cEnvir methods: messageScheduled(), messageCancelled(),
82  // beginSend(), messageSendDirect(), messageSendHop(), messageSendHop(),
83  // messageSendHop(), messageDeleted(), moduleReparented(), simulationEvent(),
84  // componentMethodBegin(), moduleCreated(), moduleDeleted(), connectionCreated(),
85  // connectionDeleted(), displayStringChanged().
86  bool suppressNotifications;
87 
88  // Debugging. When set, cRuntimeError constructor executes a debug trap/launches debugger
89  bool debugOnErrors = false;
90 
91  public:
94 
98  cEnvir();
99 
103  virtual ~cEnvir();
105 
108 
115  // note: this cannot be pure virtual, because it has to work even after ev was disposed of
116  virtual void objectDeleted(cObject *object) {}
117 
121  virtual void componentInitBegin(cComponent *component, int stage) {}
122 
130  virtual void simulationEvent(cEvent *event) = 0;
131 
136  virtual void messageScheduled(cMessage *msg) = 0;
137 
142  virtual void messageCancelled(cMessage *msg) = 0;
143 
151  virtual void beginSend(cMessage *msg) = 0;
152 
154  virtual void messageSendDirect(cMessage *msg, cGate *toGate, simtime_t propagationDelay, simtime_t transmissionDelay) = 0;
155 
157  virtual void messageSendHop(cMessage *msg, cGate *srcGate) = 0;
158 
160  virtual void messageSendHop(cMessage *msg, cGate *srcGate, simtime_t propagationDelay, simtime_t transmissionDelay, bool discard) = 0;
161 
163  virtual void endSend(cMessage *msg) = 0;
164 
169  virtual void messageCreated(cMessage *msg) = 0;
170 
175  virtual void messageCloned(cMessage *msg, cMessage* clone) = 0;
176 
182  virtual void messageDeleted(cMessage *msg) = 0;
183 
187  virtual void moduleReparented(cModule *module, cModule *oldparent, int oldId) = 0;
188 
195  virtual void componentMethodBegin(cComponent *from, cComponent *to, const char *methodFmt, va_list va, bool silent) = 0;
196 
201  virtual void componentMethodEnd() = 0;
202 
208  virtual void moduleCreated(cModule *newmodule) = 0;
209 
221  virtual void moduleDeleted(cModule *module) = 0;
222 
226  virtual void gateCreated(cGate *newgate) = 0;
227 
232  virtual void gateDeleted(cGate *gate) = 0;
233 
238  virtual void connectionCreated(cGate *srcgate) = 0;
239 
244  virtual void connectionDeleted(cGate *srcgate) = 0;
245 
250  virtual void displayStringChanged(cComponent *component) = 0;
251 
256  // Note: this may not be pure virtual, as it may get called even after main()
257  // exited and StaticEnv was destructed, and we do not want to get a "pure virtual
258  // method called" error
259  virtual void undisposedObject(cObject *obj) {}
261 
268  virtual const char *getCurrentEventName() { return nullptr; }
269 
274  virtual const char *getCurrentEventClassName() { return nullptr; }
275 
280  virtual cModule *getCurrentEventModule() { return nullptr; }
282 
285 
292  virtual void preconfigure(cComponent *component) = 0;
293 
300  virtual void configure(cComponent *component) = 0;
301 
306  virtual void readParameter(cPar *parameter) = 0;
307 
318  virtual bool isModuleLocal(cModule *parentmod, const char *modname, int index) = 0;
319 
342  virtual cXMLElement *getXMLDocument(const char *filename, const char *xpath=nullptr) = 0;
343 
365  virtual cXMLElement *getParsedXMLString(const char *content, const char *xpath=nullptr) = 0;
366 
380  virtual void forgetXMLDocument(const char *filename) = 0;
381 
394  virtual void forgetParsedXMLString(const char *content) = 0;
395 
405  virtual void flushXMLDocumentCache() = 0;
406 
416  virtual void flushXMLParsedContentCache() = 0;
417 
422  virtual unsigned getExtraStackForEnvir() const = 0;
423 
431  virtual cConfiguration *getConfig() = 0;
432 
438  virtual cConfigurationEx *getConfigEx();
439 
450  virtual std::string resolveResourcePath(const char *fileName, cComponentType *context=nullptr) = 0;
452 
462  virtual bool isGUI() const = 0;
463 
468  bool isLoggingEnabled() const { return loggingEnabled; }
469 
475  virtual bool isExpressMode() const = 0;
476 
481  virtual void bubble(cComponent *component, const char *text) = 0;
482 
486  virtual void log(cLogEntry *entry) = 0;
487 
492  virtual void alert(const char *msg) = 0;
493 
497  virtual void printfmsg(const char *fmt,...);
498 
503  virtual std::string gets(const char *prompt, const char *defaultReply=nullptr) = 0;
504 
510  virtual bool askYesNo(const char *prompt) = 0;
511 
521  virtual void getImageSize(const char *imageName, double& outWidth, double& outHeight) = 0;
522 
530  virtual void getTextExtent(const cFigure::Font& font, const char *text, double& outWidth, double& outHeight, double& outAscent) = 0;
531 
543  virtual void appendToImagePath(const char *directory) = 0;
544 
568  virtual void loadImage(const char *fileName, const char *imageName=nullptr) = 0;
569 
587  virtual cFigure::Rectangle getSubmoduleBounds(const cModule *submodule) = 0;
588 
603  virtual double getZoomLevel(const cModule *module) = 0;
604 
611  virtual double getAnimationTime() const = 0;
612 
622  virtual double getAnimationSpeed() const = 0;
623 
631  virtual double getRemainingAnimationHoldTime() const = 0;
633 
636 
641  virtual int getNumRNGs() const = 0;
642 
646  virtual cRNG *getRNG(int k) = 0;
648 
658 
666  virtual void *registerOutputVector(const char *modulename, const char *vectorname) = 0;
667 
671  virtual void deregisterOutputVector(void *vechandle) = 0;
672 
676  virtual void setVectorAttribute(void *vechandle, const char *name, const char *value) = 0;
677 
683  virtual bool recordInOutputVector(void *vechandle, simtime_t t, double value) = 0;
685 
695 
699  virtual void recordScalar(cComponent *component, const char *name, double value, opp_string_map *attributes=nullptr) = 0;
700 
705  virtual void recordStatistic(cComponent *component, const char *name, cStatistic *statistic, opp_string_map *attributes=nullptr) = 0;
707 
710 
731  virtual void addResultRecorders(cComponent *component, simsignal_t signal, const char *statisticName, cProperty *statisticTemplateProperty) = 0;
733 
741 
745  virtual std::ostream *getStreamForSnapshot() = 0;
746 
750  virtual void releaseStreamForSnapshot(std::ostream *os) = 0;
752 
758  virtual int getArgCount() const = 0;
759 
763  virtual char **getArgVector() const = 0;
764 
768  virtual int getParsimProcId() const = 0;
769 
774  virtual int getParsimNumPartitions() const = 0;
775 
779  virtual unsigned long getUniqueNumber() = 0;
780 
785  virtual void refOsgNode(osg::Node *scene) = 0;
786 
791  virtual void unrefOsgNode(osg::Node *scene) = 0;
792 
806  virtual bool idle() = 0;
807 
822  virtual bool ensureDebugger(cRuntimeError *error = nullptr) = 0;
823 
825 
833  virtual void addLifecycleListener(cISimulationLifecycleListener *listener) = 0;
834 
839  virtual void removeLifecycleListener(cISimulationLifecycleListener *listener) = 0;
840 
841  // internal. TODO it swallows exceptions, which is sometimes desirable, sometimes not!
842  virtual void notifyLifecycleListeners(SimulationLifecycleEventType eventType, cObject *details=nullptr) = 0;
844 };
845 
846 
853 class SIM_API cRunnableEnvir : public cEnvir
854 {
855  public:
860  virtual int run(int argc, char *argv[], cConfiguration *cfg) = 0;
861 };
862 
863 } // namespace omnetpp
864 
865 #endif
866 
867 
The message class in OMNeT++. cMessage objects may represent events, messages, jobs or other entities...
Definition: cmessage.h:95
Thrown when the simulation kernel or other components detect a runtime error.
Definition: cexception.h:282
Common base for module and channel classes.
Definition: ccomponent.h:48
Represents a module gate.
Definition: cgate.h:63
Root of the OMNeT++ class hierarchy. cObject is a lightweight class without any data members...
Definition: cobject.h:58
int64_t-based, base-10 fixed-point simulation time.
Definition: simtime.h:66
Represents an XML element in an XML configuration file.
Definition: cxmlelement.h:73
Abstract interface for random number generator classes.
Definition: crng.h:49
Represents an event in the discrete event simulator.
Definition: cevent.h:43
Represents a module or channel parameter.
Definition: cpar.h:68
virtual const char * getCurrentEventName()
Definition: cenvir.h:268
A callback interface for receiving notifications at various stages simulations, including setting up...
Definition: clifecyclelistener.h:186
virtual cModule * getCurrentEventModule()
Definition: cenvir.h:280
cEnvir represents the "environment" or user interface of the simulation.
Definition: cenvir.h:73
virtual const char * getCurrentEventClassName()
Definition: cenvir.h:274
This class holds various data that is captured when a particular log statement executes. It also contains the text written to the log stream.
Definition: clog.h:369
virtual void componentInitBegin(cComponent *component, int stage)
Definition: cenvir.h:121
This class represents modules in the simulation.
Definition: cmodule.h:47
Stores a (NED) property with its (possibly compound) value.
Definition: cproperty.h:38
Represents a configuration suitable for use with the Envir library.
Definition: cconfiguration.h:282
Lightweight string-to-string map, used internally in some parts of OMNeT++.
Definition: opp_string.h:200
bool isLoggingEnabled() const
Definition: cenvir.h:468
A cEnvir that can be instantiated as a user interface, like Cmdenv and Tkenv.
Definition: cenvir.h:853
virtual void objectDeleted(cObject *object)
Definition: cenvir.h:116
Common base class for cModuleType and cChannelType.
Definition: ccomponenttype.h:49
Definition: cabstracthistogram.h:21
Definition: cenvir.h:28
Represents a rectangle as an (x,y,width,height) tuple.
Definition: ccanvas.h:90
SimulationLifecycleEventType
Event type for cISimulationLifecycleListener&#39;s lifecycleEvent() method.
Definition: clifecyclelistener.h:28
virtual void undisposedObject(cObject *obj)
Definition: cenvir.h:259
int simsignal_t
Signal handle.
Definition: clistener.h:24
cStatistic is an abstract class for computing statistical properties of a random variable.
Definition: cstatistic.h:34
Represents the configuration, as accessed by the simulation kernel.
Definition: cconfiguration.h:70
Represents properties of a font.
Definition: ccanvas.h:157