EC_Disjunction_Filter.cpp

Go to the documentation of this file.
00001 // $Id: EC_Disjunction_Filter.cpp 76589 2007-01-25 18:04:11Z elliott_c $
00002 
00003 #include "orbsvcs/Event/EC_Disjunction_Filter.h"
00004 
00005 ACE_RCSID(Event, EC_Disjunction_Filter, "$Id: EC_Disjunction_Filter.cpp 76589 2007-01-25 18:04:11Z elliott_c $")
00006 
00007 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00008 
00009 TAO_EC_Disjunction_Filter::
00010     TAO_EC_Disjunction_Filter (TAO_EC_Filter* children[],
00011                                size_t n)
00012   :  children_ (children),
00013      n_ (n)
00014 {
00015   ChildrenIterator end = this->end ();
00016   for (ChildrenIterator i = this->begin ();
00017        i != end;
00018        ++i)
00019     {
00020       this->adopt_child (*i);
00021     }
00022 }
00023 
00024 TAO_EC_Disjunction_Filter::~TAO_EC_Disjunction_Filter (void)
00025 {
00026   TAO_EC_Filter** end = this->children_ + this->n_;
00027   for (TAO_EC_Filter** i = this->children_;
00028        i != end;
00029        ++i)
00030     {
00031       delete *i;
00032       *i = 0;
00033     }
00034   delete[] this->children_;
00035   this->children_ = 0;
00036   this->n_ = 0;
00037 }
00038 
00039 TAO_EC_Filter::ChildrenIterator
00040 TAO_EC_Disjunction_Filter::begin (void) const
00041 {
00042   return this->children_;
00043 }
00044 
00045 TAO_EC_Filter::ChildrenIterator
00046 TAO_EC_Disjunction_Filter::end (void) const
00047 {
00048   return this->children_ + this->n_;
00049 }
00050 
00051 int
00052 TAO_EC_Disjunction_Filter::size (void) const
00053 {
00054   return static_cast<int> (this->n_);
00055 }
00056 
00057 int
00058 TAO_EC_Disjunction_Filter::filter (const RtecEventComm::EventSet& event,
00059                                    TAO_EC_QOS_Info& qos_info)
00060 {
00061   ChildrenIterator end = this->end ();
00062   for (ChildrenIterator i = this->begin ();
00063        i != end;
00064        ++i)
00065     {
00066       int n = (*i)->filter (event, qos_info);
00067       if (n != 0)
00068         return n;
00069     }
00070   return 0;
00071 }
00072 
00073 int
00074 TAO_EC_Disjunction_Filter::filter_nocopy (RtecEventComm::EventSet& event,
00075                                    TAO_EC_QOS_Info& qos_info)
00076 {
00077   ChildrenIterator end = this->end ();
00078   for (ChildrenIterator i = this->begin ();
00079        i != end;
00080        ++i)
00081     {
00082       int n = (*i)->filter (event, qos_info);
00083       if (n != 0)
00084         return n;
00085     }
00086   return 0;
00087 }
00088 
00089 void
00090 TAO_EC_Disjunction_Filter::push (const RtecEventComm::EventSet& event,
00091                                  TAO_EC_QOS_Info& qos_info)
00092 {
00093   if (this->parent () != 0)
00094     this->parent ()->push (event, qos_info);
00095 }
00096 
00097 void
00098 TAO_EC_Disjunction_Filter::push_nocopy (RtecEventComm::EventSet& event,
00099                                  TAO_EC_QOS_Info& qos_info)
00100 {
00101   if (this->parent () != 0)
00102     this->parent ()->push_nocopy (event, qos_info);
00103 }
00104 
00105 void
00106 TAO_EC_Disjunction_Filter::clear (void)
00107 {
00108   ChildrenIterator end = this->end ();
00109   for (ChildrenIterator i = this->begin ();
00110        i != end;
00111        ++i)
00112     {
00113       (*i)->clear ();
00114     }
00115 }
00116 
00117 CORBA::ULong
00118 TAO_EC_Disjunction_Filter::max_event_size (void) const
00119 {
00120   CORBA::ULong n = 0;
00121   ChildrenIterator end = this->end ();
00122   for (ChildrenIterator i = this->begin ();
00123        i != end;
00124        ++i)
00125     {
00126       CORBA::ULong m = (*i)->max_event_size ();
00127       if (n < m)
00128         n = m;
00129     }
00130   return n;
00131 }
00132 
00133 int
00134 TAO_EC_Disjunction_Filter::can_match (
00135       const RtecEventComm::EventHeader& header) const
00136 {
00137   ChildrenIterator end = this->end ();
00138   for (ChildrenIterator i = this->begin ();
00139        i != end;
00140        ++i)
00141     {
00142       if ((*i)->can_match (header) != 0)
00143         return 1;
00144     }
00145   return 0;
00146 }
00147 
00148 int
00149 TAO_EC_Disjunction_Filter::add_dependencies (
00150       const RtecEventComm::EventHeader&,
00151       const TAO_EC_QOS_Info &)
00152 {
00153   return 0;
00154 }
00155 
00156 TAO_END_VERSIONED_NAMESPACE_DECL

Generated on Tue Feb 2 17:44:05 2010 for TAO_RTEvent by  doxygen 1.4.7