Mirror reflection library - Puddle compile-time layer 0.5.13
|
00001 00010 #ifndef PUDDLE_SPECIFIERS_1011291729_HPP 00011 #define PUDDLE_SPECIFIERS_1011291729_HPP 00012 00013 #include <mirror/specifier_tags.hpp> 00014 #include <mirror/preprocessor.hpp> 00015 00016 PUDDLE_NAMESPACE_BEGIN 00017 00025 #define PUDDLE_HLPR_DEFINE_SPEC_TAG_NAME(SPEC, X) \ 00026 spec_ ## SPEC ## _tag | 00027 00028 #define PUDDLE_HLPR_DEFINE_SPEC_TAG(SPEC, KW, GRP, I, X) \ 00029 spec_ ## SPEC ## _tag = \ 00030 MIRROR_FOR_EACH_SPECIFIER_BASE( \ 00031 SPEC, \ 00032 PUDDLE_HLPR_DEFINE_SPEC_TAG_NAME, \ 00033 X, \ 00034 MIRROR_PP_EMPTY \ 00035 ) 1ULL << I, 00036 00038 00045 #ifdef MIRROR_DOCUMENTATION_ONLY 00046 enum specifier_category 00047 #else 00048 enum class specifier_category : unsigned long long 00049 #endif 00050 { 00051 MIRROR_FOR_EACH_SPECIFIER( 00052 PUDDLE_HLPR_DEFINE_SPEC_TAG, 00053 0 00054 ) 00055 spec__tag = spec_none_tag 00056 }; 00057 00058 #undef PUDDLE_HLPR_DEFINE_SPEC_TAG_VALUE 00059 #undef PUDDLE_HLPR_DEFINE_SPEC_TAG 00060 00061 #define PUDDLE_HELPER_MAKE_SPEC_GET_CATEGORY_FN(SPEC, KW, GRP, I, X) \ 00062 inline specifier_category get_category(mirror::spec_ ## SPEC ## _tag) \ 00063 { \ 00064 return specifier_category::spec_ ## SPEC ## _tag; \ 00065 } 00066 00067 MIRROR_FOR_EACH_SPECIFIER(PUDDLE_HELPER_MAKE_SPEC_GET_CATEGORY_FN, _) 00068 #undef PUDDLE_HELPER_MAKE_SPEC_GET_CATEGORY_FN 00069 00070 00071 PUDDLE_NAMESPACE_END 00072 00073 00074 #endif //include guard 00075