X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FLogger%2FTarget.cci;h=5261bdb4dceb85648601cca913bfde683f3ee597;hb=56ec4faa5dcae61746a78375cb7de605d0b79738;hp=129bef553405c68e484afbaa395f82e52111ae5c;hpb=ae06fe86f16fdabb7ffb219d255444d2eb4f4f79;p=senf.git diff --git a/Utils/Logger/Target.cci b/Utils/Logger/Target.cci index 129bef5..5261bdb 100644 --- a/Utils/Logger/Target.cci +++ b/Utils/Logger/Target.cci @@ -34,48 +34,62 @@ /////////////////////////////////////////////////////////////////////////// // senf::log::Target -prefix_ void senf::log::Target::route(detail::StreamBase const * stream, - detail::AreaBase const * area, unsigned level) +prefix_ iterator senf::log::Target::begin() + const { - rib_.push_back(RoutingEntry(stream, area, level)); - - // Update the area/stream routing cache - if (area) - updateAreaCache(*area, stream, level); - else { - AreaRegistry::Registry::iterator i (AreaRegistry::instance().registry_.begin()); - AreaRegistry::Registry::iterator const i_end (AreaRegistry::instance().registry_.end()); - for (; i != i_end; ++i) - updateAreaCache(*(i->second), stream, level); - } - + return rib_.begin(); } -prefix_ void -senf::log::Target::updateAreaCache(detail::AreaBase const & area, - detail::StreamBase const * stream, unsigned level) +prefix_ iterator senf::log::Target::end() + const { - if (stream) { - if (level < area.streamLimit(*stream)) - area.setStreamLimit(*stream, level); - } else { - StreamRegistry::Registry::iterator i (StreamRegistry::instance().registry_.begin()); - StreamRegistry::Registry::iterator const i_end (StreamRegistry::instance().registry_.end()); - for(; i != i_end; ++i) - if (level < area.streamLimit(*(i->second))) - area.setStreamLimit(*(i->second),level); - } + return rib_.end(); } -prefix_ void senf::log::Target::unroute(detail::StreamBase const * stream, - detail::AreaBase const * area, unsigned level) +/////////////////////////////////////////////////////////////////////////// +// senf::log::Target::RoutingEntry + +prefix_ senf::log::Target::RoutingEntry::RoutingEntry(detail::StreamBase const * stream, + detail::AreaBase const * area, + unsigned level, action_t action) + : stream_(stream), area_(area), level_(level), action_(action) +{} + +prefix_ senf::log::Target::RoutingEntry::RoutingEntry() + : stream_(0), area_(0), level_(0), action_(ACCEPT) +{} + +prefix_ bool senf::log::Target::RoutingEntry::operator==(RoutingEntry const & other) +{ + return + stream_ == other.stream_ && + area_ == other.area_ && + level_ == other.level_ && + action_ == other.action_; +} + +prefix_ std::string senf::log::Target::RoutingEntry::stream() + const +{ + return stream_->v_name(); +} + +prefix_ std::string senf::log::Target::RoutingEntry::area() + const { - rib_.erase(std::remove(rib_.begin(), rib_.end(), RoutingEntry(stream, area, level)), - rib_.end()); + return area_->v_name(); +} - ///\fixme Update area/stream routing cache - // Not doing anything here does not produce incorrect behavior, since removing a route - // can never lower the logging limit. Not updating the cache just reduces the performance. +prefix_ unsigned senf::log::Target::RoutingEntry::level() + const +{ + return level_; +} + +prefix_ senf::log::Target::action_t senf::log::Target::RoutingEntry::action() + const +{ + return action_; } ///////////////////////////////////////////////////////////////////////////