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

CTBcallbackBase.hxx

Go to the documentation of this file.
00001 #ifndef _CTBcallbackBase_HXX
00002 #define _CTBcallbackBase_HXX 1
00003 
00009 /*----------------------------------------------------------------------------*/
00010 /* C Tool Box: Designed and implemented by:                                   */
00011 /*    Walter F.J. Mueller   Gesellschaft fuer Schwerionenforschung (GSI)      */
00012 /*                          Planckstrasse 1, D-64291 Darmstadt, Germany       */
00013 /*                  Email:  W.F.J.Mueller@gsi.de                              */
00014 /*                  WWW:    http://www-kp3.gsi.de/www/kp3/people/mueller.html */
00015 /*------------------------------------------+---------------------------------*/
00016  
00017 #include "CTBsimpleList.hxx"
00018 #include "CTBtreeList.hxx"
00019 
00020 class CTBcallbackLink;
00021 class CTBcallbackTargetBase;
00022 
00023 class CTBcallbackSourceBase {
00024 
00025   friend class CTBcallbackLink;
00026   friend class CTBcallbackTargetBase;
00027 
00028   public: 
00029 
00030                     CTBcallbackSourceBase();
00031                     CTBcallbackSourceBase(const CTBcallbackSourceBase& rhs);
00032 
00033     virtual         ~CTBcallbackSourceBase();
00034 
00035     int             NConnect() const;
00036 
00037     CTBcallbackSourceBase& operator=(const CTBcallbackSourceBase& rhs);
00038 
00039     bool            operator! () const;
00040 
00041                     operator bool() const;
00042 
00043   protected:
00044 
00045     void            Execute(void* p_arg) const;
00046 
00047   protected:
00048 
00049     CTBsimpleListHead<CTBcallbackLink> m_shead;
00050 };
00051 
00052 //------------------------------------------+-----------------------------------
00053 
00054 class CTBcallbackTargetBase {
00055 
00056   friend class CTBcallbackLink;
00057   friend class CTBcallbackSourceBase;
00058 
00059   public: 
00060 
00061                     CTBcallbackTargetBase();
00062                     CTBcallbackTargetBase(const CTBcallbackTargetBase& rhs);
00063 
00064     virtual         ~CTBcallbackTargetBase();
00065 
00066     int             NConnect() const;
00067     void            Disconnect();
00068 
00069     CTBcallbackTargetBase& operator=(const CTBcallbackTargetBase& rhs);
00070 
00071     bool            operator! () const;
00072 
00073                     operator bool() const;
00074 
00075   protected:
00076 
00077     void            Connect(CTBcallbackSourceBase& source);
00078     void            Disconnect(CTBcallbackSourceBase& source);
00079 
00080     virtual void    Execute(void* p_arg) const = 0;
00081 
00082   protected:
00083 
00084     CTBtreeListHead<CTBcallbackTargetBase,CTBcallbackLink> m_thead;
00085 };
00086 
00087 //------------------------------------------+-----------------------------------
00088 
00089 class CTBcallbackLink {
00090 
00091   friend class CTBcallbackSourceBase;
00092   friend class CTBcallbackTargetBase;
00093 
00094   private:
00095 
00096                     CTBcallbackLink(CTBcallbackTargetBase& target,
00097                                     CTBcallbackSourceBase& source);
00098                     CTBcallbackLink(CTBcallbackTargetBase& target,
00099                                     CTBsimpleListHead<CTBcallbackLink>& shead);
00100                      
00101                     ~CTBcallbackLink();
00102   
00103     void            Mark();
00104     void            Unmark();
00105 
00106     bool            Busy() const;
00107     bool            Zombie() const;
00108     bool            Deletable() const;
00109 
00110     void            UnlinkSource();
00111     void            UnlinkTarget();
00112 
00113   private:
00114 
00115     CTBsimpleListLink<CTBcallbackLink>                     m_slink;
00116     CTBtreeListLink<CTBcallbackTargetBase,CTBcallbackLink> m_tlink;
00117     int                                                    mi_nbusy;
00118 };
00119 
00120 #if !(defined(CTB__OutLine) || defined(CTBcallbackBase__OutLine))
00121 #include "CTBcallbackBase.icc"
00122 #endif
00123 
00124 #endif
00125 
00126 
00127 
00128 
00129 
00130 

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