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

CTBsignalBase.icc

Go to the documentation of this file.
00001 
00006 /*----------------------------------------------------------------------------*/
00007 /* C Tool Box: Designed and implemented by:                                   */
00008 /*    Walter F.J. Mueller   Gesellschaft fuer Schwerionenforschung (GSI)      */
00009 /*                          Planckstrasse 1, D-64291 Darmstadt, Germany       */
00010 /*                  Email:  W.F.J.Mueller@gsi.de                              */
00011 /*                  WWW:    http://www-kp3.gsi.de/www/kp3/people/mueller.html */
00012 /*------------------------------------------+---------------------------------*/
00013 
00014 #include <assert.h>
00015 
00016 //------------------------------------------+-----------------------------------
00018 
00019 inline CTBsignalEmitter::CTBsignalEmitter()
00020   : m_ehead()
00021 {}
00022 
00023 //------------------------------------------+-----------------------------------
00025 
00026 inline CTBsignalEmitter::CTBsignalEmitter(
00027     const CTBsignalEmitter&)
00028   : m_ehead()
00029 {}
00030 
00031 //------------------------------------------+-----------------------------------
00033 
00034 inline void CTBsignalEmitter::operator()(CTBuint32 i_mask)
00035 {
00036   if (m_ehead) Execute(i_mask);
00037   return; 
00038 }
00039  
00040 //------------------------------------------+-----------------------------------
00042 
00043 inline CTBsignalEmitter& CTBsignalEmitter::operator=(
00044     const CTBsignalEmitter&)
00045 {
00046   return *this;
00047 }
00048 
00049 //------------------------------------------+-----------------------------------
00051 
00052 inline bool CTBsignalEmitter::operator! () const
00053 {
00054   return !m_ehead;
00055 }
00056 
00057 //------------------------------------------+-----------------------------------
00059 
00060 inline CTBsignalEmitter::operator bool () const
00061 {
00062   return m_ehead;
00063 }
00064 
00065 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00067 
00068 inline CTBsignalReceiverBase::CTBsignalReceiverBase()
00069   : m_rhead(),
00070     m_phead(),
00071     mi_nblock(0)
00072 {}
00073 
00074 //------------------------------------------+-----------------------------------
00076 
00077 inline CTBsignalReceiverBase::CTBsignalReceiverBase(
00078     const CTBsignalReceiverBase& rhs)
00079   : m_rhead(),
00080     m_phead(),
00081     mi_nblock(0)
00082 {
00083   operator=(rhs);
00084 }
00085 
00086 //------------------------------------------+-----------------------------------
00088 
00089 inline void CTBsignalReceiverBase::Block()
00090 {
00091   mi_nblock += 1;
00092   return;
00093 }
00094 
00095 //------------------------------------------+-----------------------------------
00097 
00098 inline void CTBsignalReceiverBase::Unblock()
00099 {
00100   assert(mi_nblock > 0);                    // !?! should be blocked !
00101 
00102   mi_nblock -= 1;
00103   if (mi_nblock == 0) Deliver();
00104   return;
00105 }
00106 
00107 //------------------------------------------+-----------------------------------
00109 
00110 inline bool CTBsignalReceiverBase::Blocked() const
00111 {
00112   return mi_nblock > 0;
00113 }
00114 
00115 //------------------------------------------+-----------------------------------
00117 
00118 inline bool CTBsignalReceiverBase::Pending() const
00119 {
00120   return m_phead;
00121 }
00122 
00123 //------------------------------------------+-----------------------------------
00125 
00126 inline bool CTBsignalReceiverBase::operator! () const
00127 {
00128   return !m_rhead;
00129 }
00130 
00131 //------------------------------------------+-----------------------------------
00133 
00134 inline CTBsignalReceiverBase::operator bool () const
00135 {
00136   return m_rhead;
00137 }
00138 
00139 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00140 
00141 //------------------------------------------+-----------------------------------
00143 
00144 inline void CTBsignalLink::Mark()
00145 {
00146   mi_nbusy += 1;
00147   return;
00148 }
00149 
00150 //------------------------------------------+-----------------------------------
00152 
00153 inline void CTBsignalLink::Unmark()
00154 {
00155   assert(mi_nbusy > 0);                     // !?! should be busy
00156   mi_nbusy -= 1;
00157   return;
00158 }
00159 
00160 //------------------------------------------+-----------------------------------
00162 
00163 inline bool CTBsignalLink::Busy() const
00164 {
00165   return mi_nbusy > 0;
00166 }
00167 
00168 //------------------------------------------+-----------------------------------
00170 
00171 inline bool CTBsignalLink::Pending() const
00172 {
00173   return m_plink;
00174 }
00175 
00176 //------------------------------------------+-----------------------------------
00178 
00179 inline bool CTBsignalLink::Zombie() const
00180 {
00181   return !m_elink || !m_rlink;
00182 }
00183 
00184 //------------------------------------------+-----------------------------------
00186 
00187 inline bool CTBsignalLink::Deletable() const
00188 {
00189   return Zombie() && !Busy() && !Pending();
00190 }
00191 
00192 //------------------------------------------+-----------------------------------
00194 
00195 inline void CTBsignalLink::UnlinkEmitter()
00196 {
00197   if (m_elink) m_elink.Remove(&CTBsignalLink::m_elink);
00198   return;
00199 }
00200 
00201 //------------------------------------------+-----------------------------------
00203 
00204 inline void CTBsignalLink::UnlinkReceiver()
00205 {
00206   if (m_rlink) m_rlink.Remove(&CTBsignalLink::m_rlink,
00207                               &CTBsignalReceiverBase::m_rhead);
00208   if (m_plink) m_plink.Remove(&CTBsignalLink::m_plink);
00209   return;
00210 }
00211 

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