X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FLogger%2FTarget.cci;h=ba36a95ac509d2d9a0c5a819df7d1e86ec897ff5;hb=456ee576285b76aa46240f8001f426757810dcc1;hp=129bef553405c68e484afbaa395f82e52111ae5c;hpb=ae06fe86f16fdabb7ffb219d255444d2eb4f4f79;p=senf.git diff --git a/Utils/Logger/Target.cci b/Utils/Logger/Target.cci index 129bef5..ba36a95 100644 --- a/Utils/Logger/Target.cci +++ b/Utils/Logger/Target.cci @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -23,10 +23,10 @@ /** \file \brief Target inline non-template implementation */ -//#include "Target.ih" +#include "Target.ih" // Custom includes -#include +#include "AreaRegistry.hh" #define prefix_ inline ///////////////////////////////cci.p/////////////////////////////////////// @@ -34,59 +34,90 @@ /////////////////////////////////////////////////////////////////////////// // senf::log::Target -prefix_ void senf::log::Target::route(detail::StreamBase const * stream, - detail::AreaBase const * area, unsigned level) +prefix_ senf::log::Target::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_ senf::log::Target::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_ ? stream_->v_name() : ""; +} + +prefix_ std::string senf::log::Target::RoutingEntry::area() + const +{ + return area_ ? area_->v_name() : ""; +} + +prefix_ unsigned senf::log::Target::RoutingEntry::level() + const { - rib_.erase(std::remove(rib_.begin(), rib_.end(), RoutingEntry(stream, area, level)), - rib_.end()); + return level_; +} - ///\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_ senf::log::Target::action_t senf::log::Target::RoutingEntry::action() + const +{ + return action_; } /////////////////////////////////////////////////////////////////////////// -// senf::log::TargetRegistry +// senf::log::detail::TargetRegistry + +prefix_ void senf::log::detail::TargetRegistry::routed() +{ + fallbackRouting_ = false; +} + +prefix_ bool senf::log::detail::TargetRegistry::fallbackRouting() +{ + return fallbackRouting_; +} + +//////////////////////////////////////// +// private members + +prefix_ senf::log::detail::TargetRegistry::TargetRegistry() + : fallbackRouting_(true) +{} -prefix_ void senf::log::TargetRegistry::registerTarget(Target * target) +prefix_ void senf::log::detail::TargetRegistry::registerTarget(Target * target) { targets_.insert(target); } -prefix_ void senf::log::TargetRegistry::unregisterTarget(Target * target) +prefix_ void senf::log::detail::TargetRegistry::unregisterTarget(Target * target) { targets_.erase(target); }