2#include <NDEVR/String.h>
3#include <NDEVR/StringView.h>
4#include <NDEVR/StringStream.h>
15 #define NDEVR_DECLARE_ENUM_ITEM(name) name ,
19 #define NDEVR_DECLARE_ENUM(EnumName, ITEMS_MACRO) \
22 ITEMS_MACRO(NDEVR_DECLARE_ENUM_ITEM) \
28 #define _FROMSTRINGCASE(name) case String::hash(#name): v = t_enum::name; break;
32 #define _TOSTRINGCASE(name) case t_enum::name: s.referencedAppend(#name); break;
37 #define NDEVR_DEFINE_STRING_STREAM(EnumName, ITEMS_MACRO) \
38 NDEVR_DECLARE_ENUM(EnumName, ITEMS_MACRO) \
39 template<> inline void StringStream<EnumName>::fromString( \
40 const StringView& s, EnumName& v) \
42 typedef EnumName t_enum; \
44 ITEMS_MACRO(_FROMSTRINGCASE) \
46 lib_assert(false, "Bad enum"); \
47 v = cast<EnumName>(s.getAs<uint04>()); \
51 template<> inline void StringStream<EnumName>::toString( \
52 const EnumName& v, StringAllocatingView& s) \
54 typedef EnumName t_enum; \
56 ITEMS_MACRO(_TOSTRINGCASE) \
57 default: lib_assert(false, "Unknown enum"); break; \
Empty tag class used as a base for string-convertible enumerations defined via macros.
The primary namespace for the NDEVR SDK.