cchannel.h

00001 //==========================================================================
00002 //   CCHANNEL.H  -  header for
00003 //                     OMNeT++/OMNEST
00004 //            Discrete System Simulation in C++
00005 //
00006 //
00007 //  Declaration of the following classes:
00008 //    cChannel : channel class
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 __CCHANNEL_H
00020 #define __CCHANNEL_H
00021 
00022 #include "cobject.h"
00023 #include "cpar.h"
00024 #include "carray.h"
00025 
00026 //=== classes mentioned:
00027 class cPar;
00028 class cGate;
00029 class cChannelType;
00030 class cArray;
00031 class cMessage;
00032 
00033 
00040 class SIM_API cChannel : public cObject
00041 {
00042     friend class cGate; // to call setFromGate()
00043   protected:
00044     cChannelType *channeltypep;  // channel type object or NULL
00045     cArray *parlistp;            // ptr to list of all parameters
00046     cGate *fromgatep;            // gate the channel is attached to
00047     // TBD: add on/off modelling? or to cGate?
00048 
00049   protected:
00050     // helper functions
00051     void _createparlist();
00052     cArray& _parList() {if (!parlistp) _createparlist(); return *parlistp;}
00053     void setFromGate(cGate *g) {fromgatep=g;}
00054 
00055   public:
00058 
00062     cChannel(const cChannel& ch);
00063 
00067     explicit cChannel(const char *name=NULL, cChannelType *l=NULL);
00068 
00072     virtual ~cChannel();
00073 
00078     cChannel& operator=(const cChannel& msg);
00080 
00083 
00088     virtual cPolymorphic *dup() const  {return new cChannel(*this);}
00089 
00094     virtual std::string info() const;
00095 
00100     virtual void forEachChild(cVisitor *v);
00101 
00106     virtual void writeContents(std::ostream& os);
00107 
00113     virtual void netPack(cCommBuffer *buffer);
00114 
00120     virtual void netUnpack(cCommBuffer *buffer);
00122 
00125 
00129     cGate *fromGate() const {return fromgatep;}
00130 
00134     cChannelType *channelType() const {return channeltypep;}
00136 
00139 
00143     virtual cPar& addPar(const char *s)  {cPar *p=new cPar(s);_parList().add(p);return *p;}
00144 
00148     virtual cPar& addPar(cPar *p)  {_parList().add(p); return *p;}
00149 
00154     virtual cPar& par(int n);
00155 
00160     virtual cPar& par(const char *s);
00161 
00166     virtual int findPar(const char *s) const;
00167 
00171     virtual bool hasPar(const char *s) const {return findPar(s)>=0;}
00172 
00179     virtual cArray& parList();
00181 
00184 
00190     virtual bool deliver(cMessage *msg, simtime_t at);
00192 };
00193 
00194 
00200 class SIM_API cBasicChannel : public cChannel
00201 {
00202   private:
00203     cPar *disabledp;    // if not NULL and value is nonzero, channel is down (will delete all packets). Points to an object in the parlist.
00204     cPar *delayp;       // propagation delay or NULL. Points to an object in the parlist.
00205     cPar *errorp;       // bit error rate or NULL. Points to an object in the parlist.
00206     cPar *dataratep;    // data rate or NULL. Points to an object in the parlist.
00207     simtime_t transm_finishes; // end of transmission; used if dataratep!=NULL
00208 
00209   public:
00212 
00216     explicit cBasicChannel(const char *name=NULL);
00217 
00221     cBasicChannel(const cBasicChannel& ch);
00222 
00226     virtual ~cBasicChannel();
00227 
00232     cBasicChannel& operator=(const cBasicChannel& msg);
00234 
00237 
00242     virtual cPolymorphic *dup() const  {return new cBasicChannel(*this);}
00243 
00248     virtual std::string info() const;
00249 
00254     virtual void forEachChild(cVisitor *v);
00255 
00260     virtual void writeContents(std::ostream& os);
00261 
00267     virtual void netPack(cCommBuffer *buffer);
00268 
00274     virtual void netUnpack(cCommBuffer *buffer);
00276 
00279 
00284     virtual void setDelay(double d);
00285 
00294     virtual void setError(double d);
00295 
00304     virtual void setDatarate(double d);
00305 
00310     virtual void setDisabled(bool d);
00311 
00315     virtual void setDelay(cPar *p);
00316 
00320     virtual void setError(cPar *p);
00321 
00325     virtual void setDatarate(cPar *p);
00326 
00330     virtual double delay() const     {return !delayp ? 0.0 : delayp->doubleValue();}
00331 
00335     virtual double error() const     {return !errorp ? 0.0 : errorp->doubleValue();}
00336 
00340     virtual double datarate() const  {return !dataratep ? 0.0 : dataratep->doubleValue();}
00341 
00345     virtual bool disabled() const  {return !disabledp ? false : disabledp->boolValue();}
00347 
00350 
00354     virtual cPar& addPar(const char *s);
00355 
00359     virtual cPar& addPar(cPar *p);
00361 
00364 
00372     virtual bool isBusy() const;
00373 
00381     virtual simtime_t transmissionFinishes() const {return transm_finishes;}
00383 
00386 
00390     virtual bool deliver(cMessage *msg, simtime_t at);
00392 };
00393 
00394 #endif
00395 
00396 

Generated on Sat Oct 21 17:47:55 2006 for OMNeT++/OMNEST Simulation Library by  doxygen 1.4.6