00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00026 #include "Traits.hh"
00027 #include "Traits.ih"
00028
00029
00030 #include <senf/Utils/senfassert.hh>
00031
00032
00033 #define prefix_
00034
00035
00036 prefix_ long senf::console::detail::parseEnum(EnumTable const & table,
00037 ParseCommandInfo::TokensRange const & tokens)
00038 {
00039 if (tokens.size() != 1)
00040 throw SyntaxErrorException("parameter syntax error");
00041
00042 std::string sym (tokens.begin()[0].value());
00043 boost::algorithm::to_lower(sym);
00044 EnumTable::left_map::const_iterator i1 (table.left.lower_bound(sym));
00045 EnumTable::left_map::const_iterator i2 (table.left.lower_bound(sym+"\xff"));
00046 if (i1 == i2)
00047 throw SyntaxErrorException("parameter syntax error: invalid enum value: ")
00048 << tokens.begin()[0].value();
00049 long v (i1->second);
00050 if (boost::algorithm::to_lower_copy(i1->first) == sym)
00051 return v;
00052 ++i1;
00053 if (i1 != i2)
00054 throw SyntaxErrorException("parameter syntax error: ambiguous enum value: ")
00055 << tokens.begin()[0].value();
00056 return v;
00057 }
00058
00059 prefix_ std::string senf::console::detail::formatEnum(EnumTable const & table, long value)
00060 {
00061 EnumTable::right_map::const_iterator i (table.right.find(value));
00062 SENF_ASSERT( i != table.right.end(), "Invalid enum value" );
00063 return i->second;
00064 }
00065
00066
00067 #undef prefix_
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079