X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FTraits.ih;fp=senf%2FUtils%2FConsole%2FTraits.ih;h=40e55e50bd1ac6d33b44f3b64a4f683aad8c30ac;hb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;hp=0000000000000000000000000000000000000000;hpb=164fe477094d42463722584e527a02379ab5d985;p=senf.git diff --git a/senf/Utils/Console/Traits.ih b/senf/Utils/Console/Traits.ih new file mode 100644 index 0000000..40e55e5 --- /dev/null +++ b/senf/Utils/Console/Traits.ih @@ -0,0 +1,99 @@ +// $Id$ +// +// Copyright (C) 2008 +// 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 +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +/** \file + \brief Traits internal header */ + +#ifndef IH_SENF_Scheduler_Console_Traits_ +#define IH_SENF_Scheduler_Console_Traits_ 1 + +// Custom includes +#include +#include +#include +#include +#include +#include +#include +#include "../../Utils/singleton.hh" + +///////////////////////////////ih.p//////////////////////////////////////// + +namespace senf { +namespace console { +namespace detail { + +#ifndef DOXYGEN + struct StringILess + { + bool operator()(std::string const & left, std::string const & right) const + { return boost::algorithm::to_lower_copy(left) + < boost::algorithm::to_lower_copy(right); } + }; + + typedef boost::bimap, long> EnumTable; + + 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_(Prefix, Type, Values) \ + inline senf::console::detail::EnumTable & senf_console_enum_table(Prefix Type) \ + { \ + static senf::console::detail::EnumTable table; \ + if (table.empty()) \ + boost::assign::insert(table) \ + BOOST_PP_SEQ_FOR_EACH( SENF_CONSOLE_REGISTER_ENUM_ELT, Prefix, Values ); \ + return table; \ + } \ + inline void senf_console_parse_argument( \ + senf::console::ParseCommandInfo::TokensRange const & tokens, Prefix Type & out) \ + { \ + out = static_cast( \ + senf::console::detail::parseEnum( \ + senf_console_enum_table( Prefix Type() ), tokens) ); \ + } \ + inline void senf_console_format_value(Prefix Type value, std::ostream & os) \ + { \ + os << senf::console::detail::formatEnum( \ + senf_console_enum_table( Prefix Type() ), static_cast(value) ); \ + } + +#endif + +}}} + +///////////////////////////////ih.e//////////////////////////////////////// +#endif + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// comment-column: 40 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// End: