Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages   Examples  

CTBsignalBase.hxx

Go to the documentation of this file.
00001 #ifndef _CTBsignalBase_HXX
00002 #define _CTBsignalBase_HXX 1
00003 
00008 /*----------------------------------------------------------------------------*/
00009 /* C Tool Box: Designed and implemented by:                                   */
00010 /*    Walter F.J. Mueller   Gesellschaft fuer Schwerionenforschung (GSI)      */
00011 /*                          Planckstrasse 1, D-64291 Darmstadt, Germany       */
00012 /*                  Email:  W.F.J.Mueller@gsi.de                              */
00013 /*                  WWW:    http://www-kp3.gsi.de/www/kp3/people/mueller.html */
00014 /*------------------------------------------+---------------------------------*/
00015  
00016 #include "CTBsimpleList.hxx"
00017 #include "CTBtreeList.hxx"
00018 
00019 class CTBsignalLink;
00020 class CTBsignalReceiverBase;
00021 
00022 class CTBsignalEmitter {
00023 
00024   friend class CTBsignalLink;
00025   friend class CTBsignalReceiverBase;
00026 
00027   public: 
00028 
00029                     CTBsignalEmitter();
00030                     CTBsignalEmitter(const CTBsignalEmitter& rhs);
00031 
00032                     ~CTBsignalEmitter();
00033 
00034     int             NConnect() const;
00035 
00036     void            operator()(CTBuint32 i_mask);
00037 
00038     CTBsignalEmitter& operator=(const CTBsignalEmitter& rhs);
00039 
00040     bool            operator! () const;
00041 
00042                     operator bool() const;
00043 
00044   private:
00045 
00046     void            Execute(CTBuint32 i_mask) const;
00047 
00048   private:
00049 
00050     typedef CTBsimpleListHead<CTBsignalLink> ehead_t;
00051   
00052     ehead_t         m_ehead;                
00053 };
00054 
00055 //------------------------------------------+-----------------------------------
00056 
00057 class CTBsignalReceiverBase {
00058 
00059   friend class CTBsignalLink;
00060   friend class CTBsignalEmitter;
00061 
00062   public: 
00063 
00064                     CTBsignalReceiverBase();
00065                     CTBsignalReceiverBase(const CTBsignalReceiverBase& rhs);
00066 
00067     virtual         ~CTBsignalReceiverBase();
00068 
00069     int             NConnect() const;
00070     void            Disconnect();
00071     void            Disconnect(CTBsignalEmitter& emitter);
00072 
00073     void            Block();
00074     void            Unblock();
00075     bool            Blocked() const;
00076     bool            Pending() const;
00077 
00078     void            Deliver();
00079 
00080     CTBsignalReceiverBase& operator=(const CTBsignalReceiverBase& rhs);
00081 
00082     bool            operator! () const;
00083 
00084                     operator bool() const;
00085 
00086   protected:
00087 
00088     void            Connect(CTBsignalEmitter& emitter,
00089                             void* p_emitter, CTBuint32 i_mask);
00090 
00091     virtual void    Execute(void* p_emitter, CTBuint32 i_mask) const = 0;
00092 
00093   protected:
00094 
00095     typedef CTBtreeListHead<CTBsignalReceiverBase,CTBsignalLink>  rhead_t;
00096     typedef CTBsimpleListHead<CTBsignalLink>                      phead_t;
00097   
00098     rhead_t          m_rhead;               
00099     phead_t          m_phead;               
00100     int              mi_nblock;             
00101 };
00102 
00103 //------------------------------------------+-----------------------------------
00104 
00105 class CTBsignalLink {
00106 
00107   friend class CTBsignalEmitter;
00108   friend class CTBsignalReceiverBase;
00109 
00110   private:
00111 
00112                     CTBsignalLink(CTBsignalEmitter& emitter,
00113                                   CTBsignalReceiverBase& receiver,
00114                                   void* p_emitter, CTBuint32 i_mask);
00115                     CTBsignalLink(const CTBsignalLink& rhs,
00116                                   CTBsignalReceiverBase& receiver);
00117                      
00118                     ~CTBsignalLink();
00119   
00120     void            Mark();
00121     void            Unmark();
00122 
00123     bool            Busy() const;
00124     bool            Pending() const;
00125     bool            Zombie() const;
00126     bool            Deletable() const;
00127 
00128     void            UnlinkEmitter();
00129     void            UnlinkReceiver();
00130 
00131   private:
00132 
00133     typedef CTBsimpleListLink<CTBsignalLink>                      elink_t;
00134     typedef CTBtreeListLink<CTBsignalReceiverBase,CTBsignalLink>  rlink_t;
00135     typedef CTBsimpleListLink<CTBsignalLink>                      plink_t;
00136 
00137     elink_t         m_elink;                
00138     rlink_t         m_rlink;                
00139     plink_t         m_plink;                
00140     int             mi_nbusy;               
00141     void*           mp_emitter;             
00142     CTBuint32       mi_acceptmask;          
00143     CTBuint32       mi_pendingmask;         
00144 };
00145 
00146 // Notes:
00147 //  -- proofed: 07-nov-1999(2)
00148 
00149 #if !(defined(CTB__OutLine) || defined(CTBsignalBase__OutLine))
00150 #include "CTBsignalBase.icc"
00151 #endif
00152 
00153 #endif
00154 
00155 
00156 
00157 
00158 
00159 
00160 
00161 
00162 
00163 
00164 

Generated at Fri Oct 24 18:11:30 2003 for CTBbase by doxygen1.2.9-20010812 written by Dimitri van Heesch, © 1997-2001