Mirror reflection library 0.5.13

mirror/cntnr_kind_tags.hpp

Go to the documentation of this file.
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 

Copyright © 2006-2011 Matus Chochlik, University of Zilina, Zilina, Slovakia.
<matus.chochlik -at- fri.uniza.sk>
<chochlik -at -gmail.com>
Documentation generated on Fri Dec 16 2011 by Doxygen (version 1.7.3).
Important note: Although the 'boostified' version of Mirror uses the Boost C++ libraries Coding Guidelines and is implemented inside of the boost namespace, it IS NOT an officially reviewed and accepted Boost library. Mirror is being developed with the intention to be submitted for review for inclusion to the Boost C++ libraries.