template <class Type>
void parse(ParseCommandInfo::TokensRange const & tokens, Type & out);
+ template <class Type>
+ void format(Type const & value, std::ostream & os);
+
#ifndef DOXYGEN
// Parse bool: true/false, yes/no, enabled/disabled, 0/1
This macro will register an enum type and it's enumerators defined at namespace scope. See
\ref SENF_CONSOLE_REGISTER_ENUM_MEMBER to register a member enum type.
+ \note All enumerator values must be unique ignoring case.
+
+ The enum parser will accept any unique initial substring ignoring case as valid enum value.
+
\ingroup console_commands
*/
# define SENF_CONSOLE_REGISTER_ENUM(Type, Values) \
# define SENF_CONSOLE_REGISTER_ENUM_MEMBER(Class, Type, Values) \
SENF_CONSOLE_REGISTER_ENUM_(Class::, Type, Values)
+ template <class Enum>
+ struct FlagCollection
+ {
+ operator unsigned long() const { return value; }
+ FlagCollection() : value (0) {}
+ FlagCollection(unsigned long value_) : value (value_) {}
+ FlagCollection(Enum value_) : value (value_) {}
+ unsigned long value;
+ };
+
+ template <class Enum>
+ struct ArgumentTraits< FlagCollection<Enum> >
+ {
+ typedef FlagCollection<Enum> type;
+ static void parse(ParseCommandInfo::TokensRange const & tokens, type & out);
+ static std::string description();
+ static std::string str(type const & value);
+ };
+
+ template <class Enum>
+ struct ReturnValueTraits< FlagCollection<Enum> >
+ {
+ typedef FlagCollection<Enum> type;
+ static void format(type const & value, std::ostream & os);
+ };
+
}}
///////////////////////////////hh.e////////////////////////////////////////