X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FLogger%2FParameters.ih;h=d323241d2ce0f9917dd509c7085d26deebe71a56;hb=61419d9a2e1060f7ede22fa19fd9d0b401bbc87a;hp=882af7cdb182a2f349f3f3c35189e1888468e3a6;hpb=759310ea14e1fa1eb65f029762efa32d52539e59;p=senf.git diff --git a/Utils/Logger/Parameters.ih b/Utils/Logger/Parameters.ih index 882af7c..d323241 100644 --- a/Utils/Logger/Parameters.ih +++ b/Utils/Logger/Parameters.ih @@ -33,11 +33,7 @@ #include #include #include -#include "Defaults.hh" #include "../mpl.hh" -#include "Stream.hh" -#include "Area.hh" -#include "Levels.hh" #include "Config.hh" ///////////////////////////////ih.p//////////////////////////////////////// @@ -46,19 +42,26 @@ # define _senf_LOG_STREAM std::cerr #endif -typedef senf::log::Debug SENFLogDefaultStream; -typedef senf::log::DefaultArea SENFLogDefaultArea; -typedef senf::log::NONE SENFLogDefaultLevel; - namespace senf { namespace log { + + class DefaultArea; + class Debug; + class NONE; + namespace detail { - struct AliasBase {}; + class StreamBase; + class AreaBase; + class LevelBase; + class AliasBase; + /// Internal: Parameter extractor template struct Parameters_ {}; +#ifndef DOXYGEN + senf::mpl::rv<1> Parameters_select_(StreamBase *); template struct Parameters_ : public Base @@ -85,10 +88,25 @@ namespace detail { : public Param::template apply::type {}; + // This trick makes any class with a SENFLogArea typedef member usable as area. A typedef of + // this name is created by SENF_LOG_CLASS_AREA() + template + senf::mpl::rv<6> Parameters_select_( + T *, + typename boost::disable_if< boost::is_convertible >::type * = 0, + typename boost::disable_if< boost::is_convertible >::type * = 0, + typename boost::disable_if< boost::is_convertible >::type * = 0, + typename boost::disable_if< boost::is_convertible >::type * = 0); + template + struct Parameters_ : public Base + { typedef typename Param::SENFLogArea area; }; + +#endif + + /// Internal: Log message parameter collection template struct Parameters : public Base { - static bool const compile_enabled = senf::log::Enabled< typename Base::stream, typename Base::area, @@ -98,10 +116,13 @@ namespace detail { static std::ostream & log_stream() { return _senf_LOG_STREAM; } }; + /// Internal: Empty base class struct empty {}; - struct Parameters_Merge_ + /// Internal: Merge log message parameter list + struct Parameters_Merge { + /// Internal: Embedded mpl template meta-function template struct apply { typedef Parameters_< @@ -113,13 +134,17 @@ namespace detail { }}} +typedef senf::log::Debug SENFLogDefaultStream; +typedef senf::log::DefaultArea SENFLogDefaultArea; +typedef senf::log::NONE SENFLogDefaultLevel; + #define SENF_LOG_MERGE_ARG(r, data, i, elem) BOOST_PP_COMMA_IF(i) elem #define SENF_LOG_MERGE_PARAMETERS_I(base, args) \ boost::mpl::fold< \ boost::mpl::vector< BOOST_PP_SEQ_FOR_EACH_I(SENF_LOG_MERGE_ARG, _, args) >, \ base, \ - senf::log::detail::Parameters_Merge_ >::type + senf::log::detail::Parameters_Merge >::type #define SENF_LOG_MERGE_PARAMETERS(args) \ senf::log::detail::Parameters< SENF_LOG_MERGE_PARAMETERS_I( \