// Custom includes
#include <iostream>
#include <boost/intrusive_ptr.hpp>
+#include <boost/type_traits/is_same.hpp>
#include "../../Utils/intrusive_refcount.hh"
#include "Parse.hh"
#include "Node.hh"
{
typedef Type type;
+ static bool const singleToken =
+ boost::is_same< typeof(senf_console_parse_argument(
+ *static_cast<ParseCommandInfo::TokensRange const *>(0),
+ *static_cast<Type*>(0))),
+ bool >::value;
+
static void parse(ParseCommandInfo::TokensRange const & tokens, Type & out);
///< Parse token range into value
/**< This function needs to parse \a tokens and write the
\related ArgumentTraits
*/
template <class Type>
- void senf_console_parse_argument(ParseCommandInfo::TokensRange const & tokens, Type & out);
+ bool senf_console_parse_argument(ParseCommandInfo::TokensRange const & tokens, Type & out);
/** \brief Parse token range
struct ArgumentTraits<bool>
{
typedef bool type;
+ static bool const singleToken = true;
static void parse(ParseCommandInfo::TokensRange const & tokens, bool & out);
static std::string description();
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 bool const singleToken = false;
+ 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////////////////////////////////////////