Main Page | Modules | Class Hierarchy | Class List | File List | Class Members | Related Pages

csimplemodule.h

00001 //==========================================================================
00002 //   CSIMPLEMODULE.H  -  header for
00003 //                     OMNeT++/OMNEST
00004 //            Discrete System Simulation in C++
00005 //
00006 //
00007 //  Declaration of the following classes:
00008 //    cSimpleModule  : base for simple module objects
00009 //
00010 //==========================================================================
00011 
00012 /*--------------------------------------------------------------*
00013   Copyright (C) 1992-2005 Andras Varga
00014 
00015   This file is distributed WITHOUT ANY WARRANTY. See the file
00016   `license' for details on this and other legal matters.
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;      // uses activity() or handleMessage()
00066     int state;              // ended/ready/waiting for msg
00067     opp_string phasestr;    // a 'phase' string
00068     cMessage *timeoutmsg;   // msg used in wait() and receive() with timeout
00069     cCoroutine *coroutine;
00070 
00071     static bool stack_cleanup_requested; // 'true' value asks activity() to throw a cStackCleanupException
00072     static cSimpleModule *after_cleanup_transfer_to; // transfer back to this module (or to main)
00073 
00074   private:
00075     // internal use
00076     static void activate(void *p);
00077 
00078   protected:
00079     // internal use
00080     virtual void arrived(cMessage *msg,int n,simtime_t t);
00081 
00082     // internal: sets the module id.
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;   // cannot make inline because of declaration order!
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); // write snapshot file
00226 
00233     void breakpoint(const char *label);     // user breakpoint
00234 
00245     void pause(const char *phase=NULL);
00247 
00250 
00254     int send(cMessage *msg, int gateid);   // send a message thru gate id
00255 
00260     int send(cMessage *msg, const char *gatename, int sn=-1); // s:gate name, sn:index
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 

Generated on Fri Apr 1 12:25:32 2005 for OMNeT++/OMNEST Simulation Library by  doxygen 1.3.9.1