X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FTraits.ih;h=faac9a316adcdbbd1cb62628f792963d39255a37;hb=57daeae6f2e924ce3f16f9677c3474f531cba9e5;hp=a3a0d694ac85c992779c5b6ae843924baeb802a7;hpb=975639608e44e49058ccd52f05ffe6b21faeafef;p=senf.git diff --git a/senf/Utils/Console/Traits.ih b/senf/Utils/Console/Traits.ih index a3a0d69..faac9a3 100644 --- a/senf/Utils/Console/Traits.ih +++ b/senf/Utils/Console/Traits.ih @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2008 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -37,7 +37,7 @@ #include #include -///////////////////////////////ih.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace senf { namespace console { @@ -46,7 +46,7 @@ namespace console { template struct ReturnValueTraits; namespace detail { - + template struct MatchingShortType : public boost::mpl::if_c::is_signed,short,unsigned short> @@ -73,7 +73,7 @@ namespace detail { struct StringILess { bool operator()(std::string const & left, std::string const & right) const - { return boost::algorithm::to_lower_copy(left) + { return boost::algorithm::to_lower_copy(left) < boost::algorithm::to_lower_copy(right); } }; @@ -82,8 +82,29 @@ namespace detail { long parseEnum(EnumTable const & table, ParseCommandInfo::TokensRange const & tokens); std::string formatEnum(EnumTable const & table, long value); -# define SENF_CONSOLE_REGISTER_ENUM_ELT(r,d,e) \ - ( BOOST_PP_STRINGIZE(e), static_cast(d e) ) +# define SENF_CONSOLE_REGISTER_ENUM_ELT(r,d,e) \ + BOOST_PP_IF( SENF_CONSOLE_REGISTER_ENUM_HASKEY(e), \ + SENF_CONSOLE_REGISTER_ENUM_WITHKEY, \ + SENF_CONSOLE_REGISTER_ENUM_NOKEY )(d, e) + +# define SENF_CONSOLE_REGISTER_ENUM_GOBBLE__key(k,e) +# define SENF_CONSOLE_REGISTER_ENUM_GET_KEY__key(k,e) k +# define SENF_CONSOLE_REGISTER_ENUM_GET_ENUM__key(k,e) e +# define SENF_CONSOLE_REGISTER_ENUM_HASKEY(e) \ + BOOST_PP_IS_EMPTY( SENF_CAT_RECURS1(SENF_CONSOLE_REGISTER_ENUM_GOBBLE__, e) ) + +# define SENF_CONSOLE_REGISTER_ENUM_KEY_GETENUM(e) \ + SENF_CAT_RECURS2(SENF_CONSOLE_REGISTER_ENUM_GET_ENUM__, e) +# define SENF_CONSOLE_REGISTER_ENUM_KEY_GETKEY(e) \ + SENF_CAT_RECURS3(SENF_CONSOLE_REGISTER_ENUM_GET_KEY__, e) + +# define SENF_CONSOLE_REGISTER_ENUM_NOKEY(prefix, e) \ + ( BOOST_PP_STRINGIZE(e), static_cast(prefix e) ) + +# define SENF_CONSOLE_REGISTER_ENUM_WITHKEY(prefix, e) \ + ( SENF_CONSOLE_REGISTER_ENUM_KEY_GETKEY(e), \ + static_cast(prefix SENF_CONSOLE_REGISTER_ENUM_KEY_GETENUM(e)) ) + # define SENF_CONSOLE_REGISTER_ENUM_(Prefix, Type, Values) \ inline senf::console::detail::EnumTable & senf_console_enum_table(Prefix Type) \ @@ -111,7 +132,7 @@ namespace detail { }}} -///////////////////////////////ih.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #endif