/** \file
\brief Target inline non-template implementation */
-//#include "Target.ih"
+#include "Target.ih"
// Custom includes
-#include <algorithm>
#define prefix_ inline
///////////////////////////////cci.p///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
// senf::log::Target
-prefix_ void senf::log::Target::route(std::string const & stream, action_t action)
+prefix_ senf::log::Target::iterator senf::log::Target::begin()
+ const
{
- detail::StreamBase const * s (StreamRegistry::instance().lookup(stream));
- if (!s)
- throw InvalidStreamException();
- route(s, 0, NONE::value, action);
+ return rib_.begin();
}
-prefix_ void senf::log::Target::route(std::string const & stream, std::string const & area,
- action_t action)
+prefix_ senf::log::Target::iterator senf::log::Target::end()
+ const
{
- detail::StreamBase const * s (StreamRegistry::instance().lookup(stream));
- if (!s)
- throw InvalidStreamException();
- detail::AreaBase const * a (AreaRegistry::instance().lookup(area));
- if (!a)
- throw InvalidAreaException();
- route(s, a, NONE::value, action);
+ return rib_.end();
}
-prefix_ void senf::log::Target::route(std::string const & stream, unsigned level, action_t action)
-{
- detail::StreamBase const * s (StreamRegistry::instance().lookup(stream));
- if (!s)
- throw InvalidStreamException();
- route(s, 0, level, action);
+///////////////////////////////////////////////////////////////////////////
+// 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_ void senf::log::Target::route(std::string const & stream, std::string const & area,
- unsigned level, action_t action)
+prefix_ std::string senf::log::Target::RoutingEntry::stream()
+ const
{
- detail::StreamBase const * s (StreamRegistry::instance().lookup(stream));
- if (!s)
- throw InvalidStreamException();
- detail::AreaBase const * a (AreaRegistry::instance().lookup(area));
- if (!a)
- throw InvalidAreaException();
- route(s, a, level, action);
+ return stream_ ? stream_->v_name() : "";
}
-////////////////////////////////////////
-// private members
+prefix_ std::string senf::log::Target::RoutingEntry::area()
+ const
+{
+ return area_ ? area_->v_name() : "";
+}
-prefix_ void senf::log::Target::route(detail::StreamBase const * stream,
- detail::AreaBase const * area, unsigned level,
- action_t action)
+prefix_ unsigned senf::log::Target::RoutingEntry::level()
+ const
{
- rib_.push_back(RoutingEntry(stream, area, level, action));
- if (action == ACCEPT)
- updateRoutingCache(stream, area);
+ return level_;
}
-prefix_ void senf::log::Target::unroute(detail::StreamBase const * stream,
- detail::AreaBase const * area, unsigned level,
- action_t action)
+prefix_ senf::log::Target::action_t senf::log::Target::RoutingEntry::action()
+ const
{
- rib_.erase(std::remove(rib_.begin(), rib_.end(), RoutingEntry(stream, area, level, action)),
- rib_.end());
- if (action == ACCEPT)
- updateRoutingCache(stream, area);
+ return action_;
}
///////////////////////////////////////////////////////////////////////////
-// 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_)
-{}
+// senf::log::detail::TargetRegistry
-prefix_ senf::log::Target::RoutingEntry::RoutingEntry()
- : stream(0), area(0), level(0), action(ACCEPT)
-{}
+prefix_ void senf::log::detail::TargetRegistry::timeSource(std::auto_ptr<TimeSource> source)
+{
+ timeSource_.reset(source.release());
+}
-prefix_ bool senf::log::Target::RoutingEntry::operator==(RoutingEntry const & other)
-{
- return
- stream == other.stream &&
- area == other.area &&
- level == other.level &&
- action == other.action;
+prefix_ void senf::log::detail::TargetRegistry::routed()
+{
+ fallbackRouting_ = false;
}
-///////////////////////////////////////////////////////////////////////////
-// senf::log::TargetRegistry
+////////////////////////////////////////
+// private members
-prefix_ void senf::log::TargetRegistry::registerTarget(Target * target)
+prefix_ senf::log::detail::TargetRegistry::TargetRegistry()
+ : timeSource_(new SystemTimeSource()), fallbackRouting_(true)
+{}
+
+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);
}
+///////////////////////////////////////////////////////////////////////////
+// namespace senf::log members
+
+prefix_ void senf::log::timeSource(std::auto_ptr<TimeSource> source)
+{
+ detail::TargetRegistry::instance().timeSource(source);
+}
+
/////////////////////////////cci.e///////////////////////////////////////
#undef prefix_