Mirror reflection library 0.5.13
|
00001 00010 #ifndef MIRROR_CNTNR_KIND_TAGS_1104291200_HPP 00011 #define MIRROR_CNTNR_KIND_TAGS_1104291200_HPP 00012 00013 #include <mirror/config.hpp> 00014 #include <type_traits> 00015 00016 MIRROR_NAMESPACE_BEGIN 00017 00024 #define MIRROR_IMPLEMENT_CONTAINER_KIND_FUNCTIONS(UID) \ 00025 static std::integral_constant<int, UID> _uid(void) \ 00026 { \ 00027 return std::integral_constant<int, UID>(); \ 00028 } 00029 00030 00032 00040 struct non_container_tag 00041 { MIRROR_IMPLEMENT_CONTAINER_KIND_FUNCTIONS(__LINE__) }; 00042 00044 00047 struct container_tag 00048 { }; 00049 00051 00065 struct simple_container_tag 00066 : public container_tag 00067 { MIRROR_IMPLEMENT_CONTAINER_KIND_FUNCTIONS(__LINE__) }; 00068 00070 00076 struct single_value_container_tag 00077 : public container_tag 00078 { }; 00079 00081 00093 struct optional_container_tag 00094 : public single_value_container_tag 00095 { MIRROR_IMPLEMENT_CONTAINER_KIND_FUNCTIONS(__LINE__) }; 00096 00098 00114 struct variant_container_tag 00115 : public single_value_container_tag 00116 { MIRROR_IMPLEMENT_CONTAINER_KIND_FUNCTIONS(__LINE__) }; 00117 00119 00123 struct complex_container_tag 00124 : public container_tag 00125 { MIRROR_IMPLEMENT_CONTAINER_KIND_FUNCTIONS(__LINE__) }; 00126 00127 00129 00134 struct container_kind_tags 00135 { 00136 #ifdef MIRROR_DOCUMENTATION_ONLY 00137 00138 typedef Range<ContainerKindTag> type; 00139 #else 00140 typedef mp::range< 00141 non_container_tag, 00142 simple_container_tag, 00143 optional_container_tag, 00144 variant_container_tag, 00145 complex_container_tag 00146 > type; 00147 #endif 00148 }; 00149 00150 #undef MIRROR_IMPLEMENT_CONTAINER_KIND_FUNCTIONS 00151 00152 MIRROR_NAMESPACE_END 00153 00154 #endif //include guard 00155