diff --git a/Utils/Logger/Target.cc b/Utils/Logger/Target.cc index 2cc923d004c1e3ff06eb3ac0dff08b8cbf042737..a277dd58203fb280747583abdb3387c2483f9de7 100644 --- a/Utils/Logger/Target.cc +++ b/Utils/Logger/Target.cc @@ -85,6 +85,8 @@ prefix_ void senf::log::Target::unroute(std::string const & stream, std::string prefix_ void senf::log::Target::unroute(int index) { + if (rib_.empty()) + return; RIB::iterator i; if (index < 0) { if (RIB::size_type(-index) >= rib_.size()) @@ -110,6 +112,17 @@ prefix_ void senf::log::Target::unroute(int index) updateRoutingCache(entry.stream_, entry.area_); } +prefix_ void senf::log::Target::clear() +{ + RIB old; + rib_.swap(old); + RIB::const_iterator i (old.begin()); + RIB::const_iterator const i_end (old.end()); + for (; i != i_end; ++i) + if (i->action_ == ACCEPT) + updateRoutingCache(i->stream_, i->area_) +} + //////////////////////////////////////// // private members diff --git a/Utils/Logger/Target.cci b/Utils/Logger/Target.cci index c7854973df34fbb0a7841109961d36213192ca9b..60279399763d42383a80c92147c50a7c96d69330 100644 --- a/Utils/Logger/Target.cci +++ b/Utils/Logger/Target.cci @@ -56,6 +56,24 @@ prefix_ senf::log::Target::iterator senf::log::Target::end() return rib_.end(); } +prefix_ RoutingEntry const & senf::log::Target::operator[](size_type i) + size_type size() const +{ + return rib_[i]; +} + +prefix_ RoutingEntry const & senf::log::Target::operator[](size_type i) + size_type size() const +{ + return rib_.size(); +} + +prefix_ bool senf::log::Target::empty() + const +{ + return rib_.empty(); +} + /////////////////////////////////////////////////////////////////////////// // senf::log::Target::RoutingEntry diff --git a/Utils/Logger/Target.hh b/Utils/Logger/Target.hh index 622adf1e5762df4217c2f79af25cde42542504c6..e969f1a8f326ab5120e39233c03743207661495a 100644 --- a/Utils/Logger/Target.hh +++ b/Utils/Logger/Target.hh @@ -179,6 +179,7 @@ namespace log { public: typedef RIB::const_iterator iterator; ///< Routing table iterator + typedef RIB::size_type size_type; /////////////////////////////////////////////////////////////////////////// ///\name Structors and default members @@ -332,6 +333,13 @@ namespace log { iterator begin() const; ///< Iterator to beginning of routing table iterator end() const; ///< Iterator past the end of routing table + RoutingEntry const & operator[](size_type i) ///< Access routing entry + + size_type size() const; ///< Number of routing table entries + bool empty() const; ///< \c true, if routing table empty, \c false otherwise + + void clear(); ///< Clear routing table + private: void route(detail::StreamBase const * stream, detail::AreaBase const * area, unsigned level, action_t action, int index);