Select_Reactor_T.inl

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Select_Reactor_T.inl,v 4.5 2006/02/10 10:38:26 jwillemsen Exp
00004 
00005 #include "ace/Reactor.h"
00006 #include "ace/Signal.h"
00007 
00008 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00009 
00010 template <class ACE_SELECT_REACTOR_TOKEN>
00011 ACE_INLINE int
00012 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::resume_handler (ACE_Event_Handler *h)
00013 {
00014   ACE_TRACE ("ACE_Select_Reactor_T::resume_handler");
00015   return this->resume_handler (h->get_handle ());
00016 }
00017 
00018 template <class ACE_SELECT_REACTOR_TOKEN>
00019 ACE_INLINE int
00020 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::resume_handler (const ACE_Handle_Set &handles)
00021 {
00022   ACE_TRACE ("ACE_Select_Reactor_T::resume_handler");
00023   ACE_Handle_Set_Iterator handle_iter (handles);
00024   ACE_HANDLE h;
00025 
00026   ACE_MT (ACE_GUARD_RETURN (ACE_SELECT_REACTOR_TOKEN, ace_mon, this->token_, -1));
00027 
00028   while ((h = handle_iter ()) != ACE_INVALID_HANDLE)
00029     if (this->resume_i (h) == -1)
00030       return -1;
00031 
00032   return 0;
00033 }
00034 
00035 template <class ACE_SELECT_REACTOR_TOKEN>
00036 ACE_INLINE int
00037 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::suspend_handler (ACE_Event_Handler *h)
00038 {
00039   ACE_TRACE ("ACE_Select_Reactor_T::suspend_handler");
00040   return this->suspend_handler (h->get_handle ());
00041 }
00042 
00043 template <class ACE_SELECT_REACTOR_TOKEN>
00044 ACE_INLINE int
00045 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::suspend_handler (const ACE_Handle_Set &handles)
00046 {
00047   ACE_TRACE ("ACE_Select_Reactor_T::suspend_handler");
00048   ACE_Handle_Set_Iterator handle_iter (handles);
00049   ACE_HANDLE h;
00050 
00051   ACE_MT (ACE_GUARD_RETURN (ACE_SELECT_REACTOR_TOKEN, ace_mon, this->token_, -1));
00052 
00053   while ((h = handle_iter ()) != ACE_INVALID_HANDLE)
00054     if (this->suspend_i (h) == -1)
00055       return -1;
00056 
00057   return 0;
00058 }
00059 
00060 template <class ACE_SELECT_REACTOR_TOKEN>
00061 ACE_INLINE int
00062 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::register_handler (int signum,
00063                                                                   ACE_Event_Handler *new_sh,
00064                                                                   ACE_Sig_Action *new_disp,
00065                                                                   ACE_Event_Handler **old_sh,
00066                                                                   ACE_Sig_Action *old_disp)
00067 {
00068   ACE_TRACE ("ACE_Select_Reactor_T::register_handler");
00069   return this->signal_handler_->register_handler (signum,
00070                                                   new_sh, new_disp,
00071                                                   old_sh, old_disp);
00072 }
00073 
00074 #if defined (ACE_WIN32)
00075 
00076 template <class ACE_SELECT_REACTOR_TOKEN>
00077 ACE_INLINE int
00078 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::register_handler (ACE_Event_Handler *,
00079                                                                   ACE_HANDLE )
00080 {
00081   // Don't have an implementation for this yet...
00082   ACE_NOTSUP_RETURN (-1);
00083 }
00084 
00085 #endif /* ACE_WIN32 */
00086 
00087 template <class ACE_SELECT_REACTOR_TOKEN>
00088 ACE_INLINE int
00089 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::register_handler (ACE_HANDLE ,
00090                                                                   ACE_HANDLE ,
00091                                                                   ACE_Event_Handler *,
00092                                                                   ACE_Reactor_Mask )
00093 {
00094   // Don't have an implementation for this yet...
00095   ACE_NOTSUP_RETURN (-1);
00096 }
00097 
00098 template <class ACE_SELECT_REACTOR_TOKEN>
00099 ACE_INLINE int
00100 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::handler (int signum, ACE_Event_Handler **handler)
00101 {
00102   ACE_TRACE ("ACE_Select_Reactor_T::handler");
00103   return this->handler_i (signum, handler);
00104 }
00105 
00106 template <class ACE_SELECT_REACTOR_TOKEN>
00107 ACE_INLINE int
00108 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::remove_handler (int signum,
00109                                                                 ACE_Sig_Action *new_disp,
00110                                                                 ACE_Sig_Action *old_disp,
00111                                                                 int sigkey)
00112 {
00113   ACE_TRACE ("ACE_Select_Reactor_T::remove_handler");
00114   return this->signal_handler_->remove_handler (signum, new_disp, old_disp, sigkey);
00115 }
00116 
00117 template <class ACE_SELECT_REACTOR_TOKEN>
00118 ACE_INLINE int
00119 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::uses_event_associations (void)
00120 {
00121   // Since the Select_Reactor does not do any event associations, this
00122   // function always return 0.
00123   return 0;
00124 }
00125 
00126 // = The remaining methods in this file must be called with locks
00127 // held.
00128 
00129 // Performs operations on the "ready" bits.
00130 
00131 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00132 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::ready_ops (ACE_Event_Handler *handler,
00133                                                            ACE_Reactor_Mask mask,
00134                                                            int ops)
00135 {
00136   ACE_TRACE ("ACE_Select_Reactor_T::ready_ops");
00137   return this->ready_ops (handler->get_handle (), mask, ops);
00138 }
00139 
00140 // Performs operations on the "dispatch" masks.
00141 
00142 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00143 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::mask_ops (ACE_Event_Handler *handler,
00144                                                           ACE_Reactor_Mask mask,
00145                                                           int ops)
00146 {
00147   ACE_TRACE ("ACE_Select_Reactor_T::mask_ops");
00148   return this->mask_ops (handler->get_handle (), mask, ops);
00149 }
00150 
00151 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00152 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::schedule_wakeup (ACE_Event_Handler *eh,
00153                                                                  ACE_Reactor_Mask mask)
00154 {
00155   ACE_TRACE ("ACE_Select_Reactor_T::schedule_wakeup");
00156   return this->mask_ops (eh->get_handle (), mask, ACE_Reactor::ADD_MASK);
00157 }
00158 
00159 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00160 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::cancel_wakeup (ACE_Event_Handler *eh,
00161                                                                ACE_Reactor_Mask mask)
00162 {
00163   ACE_TRACE ("ACE_Select_Reactor_T::cancel_wakeup");
00164   return this->mask_ops (eh->get_handle (), mask, ACE_Reactor::CLR_MASK);
00165 }
00166 
00167 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00168 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::schedule_wakeup (ACE_HANDLE handle,
00169                                                                  ACE_Reactor_Mask mask)
00170 {
00171   ACE_TRACE ("ACE_Select_Reactor_T::schedule_wakeup");
00172   return this->mask_ops (handle, mask, ACE_Reactor::ADD_MASK);
00173 }
00174 
00175 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00176 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::cancel_wakeup (ACE_HANDLE handle,
00177                                                                ACE_Reactor_Mask mask)
00178 {
00179   ACE_TRACE ("ACE_Select_Reactor_T::cancel_wakeup");
00180   return this->mask_ops (handle, mask, ACE_Reactor::CLR_MASK);
00181 }
00182 
00183 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE ACE_Lock &
00184 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::lock (void)
00185 {
00186   ACE_TRACE ("ACE_Select_Reactor_T::lock");
00187   return this->lock_adapter_;
00188 }
00189 
00190 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE void
00191 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::wakeup_all_threads (void)
00192 {
00193   // Send a notification, but don't block if there's no one to receive
00194   // it.
00195   this->notify (0, ACE_Event_Handler::NULL_MASK, (ACE_Time_Value *) &ACE_Time_Value::zero);
00196 }
00197 
00198 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00199 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::alertable_handle_events (ACE_Time_Value *max_wait_time)
00200 {
00201   return this->handle_events (max_wait_time);
00202 }
00203 
00204 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00205 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::alertable_handle_events (ACE_Time_Value &max_wait_time)
00206 {
00207   return this->handle_events (max_wait_time);
00208 }
00209 
00210 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00211 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::deactivated (void)
00212 {
00213   return this->deactivated_;
00214 }
00215 
00216 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE void
00217 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::deactivate (int do_stop)
00218 {
00219   {
00220     ACE_MT (ACE_GUARD (ACE_SELECT_REACTOR_TOKEN,
00221                        ace_mon,
00222                        this->token_));
00223     this->deactivated_ = do_stop;
00224   }
00225 
00226   this->wakeup_all_threads ();
00227 }
00228 
00229 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE size_t
00230 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::size (void) const
00231 {
00232   return this->handler_rep_.size ();
00233 }
00234 
00235 ACE_END_VERSIONED_NAMESPACE_DECL

Generated on Thu Nov 9 09:42:02 2006 for ACE by doxygen 1.3.6