00001
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