00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CSIMPLEMODULE_H
00020 #define __CSIMPLEMODULE_H
00021
00022 #include "cmodule.h"
00023
00024
00058 class SIM_API cSimpleModule : public cModule
00059 {
00060 friend class cModule;
00061 friend class cSimulation;
00062 friend class TSimpleModInspector;
00063
00064 private:
00065 bool usesactivity;
00066 int state;
00067 opp_string phasestr;
00068 cMessage *timeoutmsg;
00069 cCoroutine *coroutine;
00070
00071 static bool stack_cleanup_requested;
00072 static cSimpleModule *after_cleanup_transfer_to;
00073
00074 private:
00075
00076 static void activate(void *p);
00077
00078 protected:
00079
00080 virtual void arrived(cMessage *msg,int n,simtime_t t);
00081
00082
00083 virtual void setId(int n);
00084
00085 protected:
00096
00102 virtual void activity();
00103
00108 virtual void handleMessage(cMessage *msg);
00110
00111 public:
00114
00118 cSimpleModule(const cSimpleModule& mod);
00119
00124 cSimpleModule(const char *name, cModule *parentmod, unsigned stk);
00125
00129 virtual ~cSimpleModule();
00130
00134 cSimpleModule& operator=(const cSimpleModule& mod);
00136
00139
00144 virtual cObject *dup() const {return new cSimpleModule(*this);}
00145
00150 virtual std::string info() const;
00151
00156 virtual void forEachChild(cVisitor *v);
00158
00161
00165 virtual void scheduleStart(simtime_t t);
00166
00171 virtual void deleteModule();
00173
00176
00180 bool usesActivity() const {return usesactivity;}
00182
00185
00190 simtime_t simTime() const;
00192
00195
00201 void setPhase(const char *phase) {phasestr=phase;}
00202
00207 const char *phase() const {return phasestr.c_str();}
00208
00225 bool snapshot(cObject *obj=&simulation, const char *label=NULL);
00226
00233 void breakpoint(const char *label);
00234
00245 void pause(const char *phase=NULL);
00247
00250
00254 int send(cMessage *msg, int gateid);
00255
00260 int send(cMessage *msg, const char *gatename, int sn=-1);
00261
00265 int send(cMessage *msg, cGate *outputgate);
00266
00271 int sendDelayed(cMessage *msg, double delay, int gateid);
00272
00278 int sendDelayed(cMessage *msg, double delay, const char *gatename, int sn=-1);
00279
00284 int sendDelayed(cMessage *msg, double delay, cGate *outputgate);
00285
00291 int sendDirect(cMessage *msg, double delay, cModule *mod, int inputgateid);
00292
00315 int sendDirect(cMessage *msg, double delay, cModule *mod, const char *inputgatename, int sn=-1);
00316
00322 int sendDirect(cMessage *msg, double delay, cGate *inputgate);
00324
00327
00354 int scheduleAt(simtime_t t, cMessage *msg);
00355
00362 cMessage *cancelEvent(cMessage *msg);
00364
00371
00376 cMessage *receive();
00377
00385 cMessage *receive(simtime_t timeout);
00387
00390
00404 void wait(simtime_t time);
00405
00413 void waitAndEnqueue(simtime_t time, cQueue *queue);
00415
00418
00430 void end();
00431
00436 void endSimulation();
00437
00442 void error(const char *fmt,...) const;
00444
00447
00455 void recordScalar(const char *name, double value);
00457
00460
00469 virtual bool stackOverflow() const;
00470
00475 virtual unsigned stackSize() const;
00476
00485 virtual unsigned stackUsage() const;
00487
00493 int moduleState() const {return state;}
00495 };
00496
00497 #endif
00498