Utils/Logger: Extend Target routing API
g0dil [Tue, 3 Feb 2009 10:50:21 +0000 (10:50 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1094 270642c3-0616-0410-b53a-bc976706d245

Utils/Logger/Target.cc
Utils/Logger/Target.cci
Utils/Logger/Target.hh

index 2cc923d..a277dd5 100644 (file)
@@ -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
 
index c785497..6027939 100644 (file)
@@ -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
 
index 622adf1..e969f1a 100644 (file)
@@ -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);