Utils/Console: Fix rename Target::clear() to Target::flush() to fix name clash (Targe...
[senf.git] / Utils / Logger / Target.cc
index d63201f..068631c 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::flush()
+{
+    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
 
@@ -141,10 +154,10 @@ prefix_ void senf::log::Target::route(detail::StreamBase const * stream,
 }
 
 prefix_ void senf::log::Target::unroute(detail::StreamBase const * stream,
-                                        detail::AreaBase const * area, unsigned level, 
+                                        detail::AreaBase const * area, unsigned level,
                                         action_t action)
 {
-    RIB::iterator i = std::find(rib_.begin(), rib_.end(), 
+    RIB::iterator i = std::find(rib_.begin(), rib_.end(),
                                 RoutingEntry(stream, area, level, action));
     if (i != rib_.end())
         unroute(std::distance(rib_.begin(), i));
@@ -210,18 +223,29 @@ prefix_ void senf::log::detail::TargetRegistry::write(StreamBase const & stream,
 {
     if (fallbackRouting_) {
         if (level >= stream.defaultRuntimeLimit())
-            static_cast<Target &>(ConsoleTarget::instance()).v_write( 
+            static_cast<Target &>(ConsoleTarget::instance()).v_write(
                 TimeSource::now(), stream.v_name(), area.v_name(), level, msg );
     }
     else
         area.write( TimeSource::now(), stream, level, msg );
 }
+///////////////////////////////////////////////////////////////////////////
+// namespace members
+
+prefix_ std::ostream & senf::log::operator<<(std::ostream & os, senf::log::Target::action_t const & action)
+{
+    if( action == Target::ACCEPT) os << "ACCEPT";
+    else if( action == Target::REJECT) os << "REJECT";
+    else os << "unknown action";
+    return os;
+}
+
 
 ///////////////////////////////cc.e////////////////////////////////////////
 #undef prefix_
 //#include "Target.mpp"
 
-\f
+
 // Local Variables:
 // mode: c++
 // fill-column: 100