LF_Multi_Event.cpp

Go to the documentation of this file.
00001 #include "tao/LF_Multi_Event.h"
00002 #include "tao/Connection_Handler.h"
00003 #include "ace/OS_Memory.h"
00004 
00005 ACE_RCSID(tao,
00006           LF_Multi_Event,
00007           "LF_Multi_Event.cpp,v 1.2 2006/05/03 03:38:25 mesnier_p Exp")
00008 
00009 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00010 
00011 
00012 TAO_LF_Multi_Event::TAO_LF_Multi_Event (void)
00013   : TAO_LF_Event (),
00014     events_ (0),
00015     winner_ (0)
00016 {
00017 }
00018 
00019 TAO_LF_Multi_Event::~TAO_LF_Multi_Event (void)
00020 {
00021   while (this->events_ != 0)
00022     {
00023       Event_Node *n = this->events_->next_;
00024       delete this->events_;
00025       this->events_ = n;
00026     }
00027 }
00028 
00029 int
00030 TAO_LF_Multi_Event::bind (TAO_LF_Follower *follower)
00031 {
00032   if (this->TAO_LF_Event::bind(follower) == -1)
00033     {
00034       return -1;
00035     }
00036 
00037   for (Event_Node *n = this->events_; n != 0; n = n->next_)
00038     if (n->ptr_->bind(follower) == -1)
00039       {
00040         return -1;
00041       }
00042   return 0;
00043 }
00044 
00045 int
00046 TAO_LF_Multi_Event::unbind (void)
00047 {
00048   if (this->TAO_LF_Event::unbind() == -1)
00049     {
00050       return -1;
00051     }
00052 
00053   for (Event_Node *n = this->events_; n != 0; n = n->next_)
00054     if (n->ptr_->unbind() == -1)
00055       {
00056         return -1;
00057       }
00058   return 0;
00059 }
00060 
00061 
00062 void
00063 TAO_LF_Multi_Event::add_event (TAO_Connection_Handler *ev)
00064 {
00065   Event_Node *node = 0;
00066   ACE_NEW (node, Event_Node);
00067   node->next_ = this->events_;
00068   node->ptr_ = ev;
00069 
00070   this->events_ = node;
00071 }
00072 
00073 TAO_Connection_Handler*
00074 TAO_LF_Multi_Event::winner (void)
00075 {
00076   return this->winner_;
00077 }
00078 
00079 TAO_Transport *
00080 TAO_LF_Multi_Event::base_transport (void)
00081 {
00082   return (this->events_ == 0) ? 0 : this->events_->ptr_->transport();
00083 }
00084 
00085 int
00086 TAO_LF_Multi_Event::successful (void) const
00087 {
00088   for (Event_Node *n = this->events_; n != 0; n = n->next_)
00089     if (n->ptr_->successful() == 1)
00090       {
00091         this->winner_ = n->ptr_;
00092         return 1;
00093       }
00094   return 0;
00095 }
00096 
00097 int
00098 TAO_LF_Multi_Event::error_detected (void) const
00099 {
00100   int result = 1;
00101   for (Event_Node *n = this->events_; n != 0; n = n->next_)
00102     if (n->ptr_->error_detected () == 0)
00103       result = 0;
00104   return result;
00105 }
00106 
00107 void
00108 TAO_LF_Multi_Event::state_changed_i (int )
00109 {
00110   // no-op
00111 }
00112 
00113 int
00114 TAO_LF_Multi_Event::is_state_final (void)
00115 {
00116   int result = 1;
00117   for (Event_Node *n = this->events_; n != 0; n = n->next_)
00118     if (!n->ptr_->is_state_final () == 0)
00119       result = 0;
00120   return result;
00121 }
00122 
00123 TAO_END_VERSIONED_NAMESPACE_DECL

Generated on Thu Nov 9 11:54:15 2006 for TAO by doxygen 1.3.6