Mirror reflection library 0.5.13

mirror/intrinsic.hpp

Go to the documentation of this file.
00001 
00011 #ifndef MIRROR_INTRINSIC_1011291729_HPP
00012 #define MIRROR_INTRINSIC_1011291729_HPP
00013 
00014 #include <mirror/meta_prog/is_a.hpp>
00015 #include <mirror/meta_prog/as_a.hpp>
00016 #include <mirror/meta_object_tags.hpp>
00017 
00018 MIRROR_NAMESPACE_BEGIN
00019 
00020 #ifndef MIRROR_DOCUMENTATION_ONLY
00021 
00022 template <class MetaTypeExpr>
00023 struct original_type
00024 {
00025     // try to evaluate the expression as a MetaType
00026     // and get its original_type
00027     typedef typename mp::as_a<
00028         MetaTypeExpr,
00029         meta_type_tag
00030     >::type::original_type type;
00031 };
00032 
00033 template <class MetaNamedObjectExpr>
00034 struct static_name
00035 {
00036     typedef typename mp::as_a<
00037         MetaNamedObjectExpr,
00038         meta_named_object_tag
00039     >::type::static_name type;
00040 };
00041 
00042 template <class MetaScopedObjectExpr>
00043 struct scope
00044 {
00045     typedef typename mp::as_a<
00046         MetaScopedObjectExpr,
00047         meta_scoped_object_tag
00048     >::type::scope type;
00049 };
00050 
00051 template <class MetaTypeExpr>
00052 struct container_kind
00053 {
00054     typedef typename mp::as_a<
00055         MetaTypeExpr,
00056         meta_type_tag
00057     >::type::container_kind type;
00058 };
00059 
00060 template <class MetaClassExpr>
00061 struct elaborated_type
00062 {
00063     typedef typename mp::as_a<
00064         MetaClassExpr,
00065         meta_class_tag
00066     >::type::elaborated_type type;
00067 };
00068 
00069 template <class MetaVariableExpr>
00070 struct storage_class
00071 {
00072     typedef typename mp::as_a<
00073         MetaVariableExpr,
00074         meta_variable_tag
00075     >::type::storage_class type;
00076 };
00077 
00078 template <class MetaFunctionExpr>
00079 struct linkage
00080 {
00081     typedef typename mp::as_a<
00082         MetaFunctionExpr,
00083         meta_function_tag
00084     >::type::linkage type;
00085 };
00086 
00087 template <class MetaMemberFunctionExpr>
00088 struct constness
00089 {
00090     typedef typename mp::as_a<
00091         MetaMemberFunctionExpr,
00092         meta_member_function_tag
00093     >::type::constness type;
00094 };
00095 
00096 template <class MetaInheritanceExpr>
00097 struct inheritance_type
00098 {
00099     typedef typename mp::as_a<
00100         MetaInheritanceExpr,
00101         meta_inheritance_tag
00102     >::type::inheritance_type type;
00103 };
00104 
00105 template <class MetaInheritanceExpr>
00106 struct derived_class
00107 {
00108     typedef typename mp::as_a<
00109         MetaInheritanceExpr,
00110         meta_inheritance_tag
00111     >::type::derived_class type;
00112 };
00113 
00114 template <class MetaInheritanceExpr>
00115 struct base_class
00116 {
00117     typedef typename mp::as_a<
00118         MetaInheritanceExpr,
00119         meta_inheritance_tag
00120     >::type::base_class type;
00121 };
00122 
00123 template <class MetaInheritanceExpr>
00124 struct base_class_access_type
00125 {
00126     typedef typename mp::as_a<
00127         MetaInheritanceExpr,
00128         meta_inheritance_tag
00129     >::type::access_type type;
00130 };
00131 
00132 template <class MetaClassMemberExpr>
00133 struct class_member_access_type
00134 {
00135     typedef typename mp::as_a<
00136         MetaClassMemberExpr,
00137         meta_class_member_tag
00138     >::type::access_type type;
00139 };
00140 
00141 template <class MetaParameterExpr>
00142 struct parameter_position
00143 {
00144     typedef typename mp::as_a<
00145         MetaParameterExpr,
00146         meta_parameter_tag
00147     >::type::position type;
00148 };
00149 
00150 template <class MetaTemplatedTypeExpr>
00151 struct type_template
00152 {
00153     typedef typename mp::as_a<
00154         MetaTemplatedTypeExpr,
00155         meta_templated_type_tag
00156     >::type::type_template type;
00157 };
00158 
00159 template <class MetaVariableExpr>
00160 struct type_of
00161 {
00162     typedef typename mp::as_a<
00163         MetaVariableExpr,
00164         meta_variable_tag
00165     >::type::type type;
00166 };
00167 
00168 template <class MetaEnumExpr>
00169 struct enum_size
00170 {
00171     typedef typename mp::as_a<
00172         MetaEnumExpr,
00173         meta_enum_tag
00174     >::type::size type;
00175 };
00176 
00177 template <class X>
00178 struct members
00179 {
00180     MIRROR_ASSERT_RETURNS_META(scope, X);
00181     typedef typename members<typename X::type>::type type;
00182 };
00183 
00184 template <class X>
00185 struct template_parameters
00186 {
00187     MIRROR_ASSERT_RETURNS_META(templated_type, X);
00188     typedef typename template_parameters<typename X::type>::type type;
00189 };
00190 
00191 template <class X>
00192 struct base_classes
00193 {
00194     MIRROR_ASSERT_RETURNS_META(class, X);
00195     typedef typename base_classes<typename X::type>::type type;
00196 };
00197 
00198 template <class X>
00199 struct member_variables
00200 {
00201     MIRROR_ASSERT_RETURNS_META(class, X);
00202     typedef typename member_variables<typename X::type>::type type;
00203 };
00204 
00205 template <class X>
00206 struct all_member_variables
00207 {
00208     MIRROR_ASSERT_RETURNS_META(class, X);
00209     typedef typename all_member_variables<typename X::type>::type type;
00210 };
00211 
00212 template <class X>
00213 struct class_layout
00214 {
00215     MIRROR_ASSERT_RETURNS_META(class, X);
00216     typedef typename class_layout<typename X::type>::type type;
00217 };
00218 
00219 template <class X>
00220 struct constructors
00221 {
00222     MIRROR_ASSERT_RETURNS_META(type, X);
00223     typedef typename constructors<typename X::type>::type type;
00224 };
00225 
00226 template <class X>
00227 struct overloads
00228 {
00229     MIRROR_ASSERT_RETURNS_META(overloaded_functions, X);
00230     typedef typename overloads<typename X::type>::type type;
00231 };
00232 
00233 template <class X>
00234 struct member_functions
00235 {
00236     MIRROR_ASSERT_RETURNS_META(class, X);
00237     typedef typename member_functions<typename X::type>::type type;
00238 };
00239 
00240 template <class X>
00241 struct conversions
00242 {
00243     MIRROR_ASSERT_RETURNS_META(class, X);
00244     typedef typename conversions<typename X::type>::type type;
00245 };
00246 
00247 template <class X>
00248 struct parameters
00249 {
00250     MIRROR_ASSERT_RETURNS_META(function, X);
00251     typedef typename parameters<typename X::type>::type type;
00252 };
00253 
00254 template <class X>
00255 struct enum_values
00256 {
00257     MIRROR_ASSERT_RETURNS_META(enum, X);
00258     typedef typename enum_values<typename X::type>::type type;
00259 };
00260 
00261 template <class X>
00262 struct namespaces
00263 {
00264     MIRROR_ASSERT_RETURNS_META(namespace, X);
00265     typedef typename namespaces<typename X::type>::type type;
00266 };
00267 
00268 template <class X>
00269 struct free_variables
00270 {
00271     MIRROR_ASSERT_RETURNS_META(namespace, X);
00272     typedef typename free_variables<typename X::type>::type type;
00273 };
00274 
00275 template <class X>
00276 struct containers
00277 {
00278     MIRROR_ASSERT_RETURNS_META(class, X);
00279     typedef typename containers<typename X::type>::type type;
00280 };
00281 
00282 template <class X>
00283 struct all_containers
00284 {
00285     MIRROR_ASSERT_RETURNS_META(class, X);
00286     typedef typename all_containers<typename X::type>::type type;
00287 };
00288 
00289 template <class X>
00290 struct default_traversal
00291 {
00292     MIRROR_ASSERT_RETURNS_META(container, X);
00293     typedef typename default_traversal<typename X::type>::type type;
00294 };
00295 
00296 template <class X>
00297 struct traversals
00298 {
00299     MIRROR_ASSERT_RETURNS_META(container, X);
00300     typedef typename traversals<typename X::type>::type type;
00301 };
00302 
00303 template <class X>
00304 struct locators
00305 {
00306     MIRROR_ASSERT_RETURNS_META(container, X);
00307     typedef typename locators<typename X::type>::type type;
00308 };
00309 
00310 template <class X>
00311 struct inserters
00312 {
00313     MIRROR_ASSERT_RETURNS_META(container, X);
00314     typedef typename inserters<typename X::type>::type type;
00315 };
00316 
00317 template <class X>
00318 struct erasers
00319 {
00320     MIRROR_ASSERT_RETURNS_META(container, X);
00321     typedef typename erasers<typename X::type>::type type;
00322 };
00323 
00324 
00325 template <class X>
00326 struct generalizations
00327 {
00328     MIRROR_ASSERT_RETURNS_META(meta_object, X);
00329     typedef typename generalizations<typename X::type>::type type;
00330 };
00331 
00332 #endif // MIRROR_DOCUMENTATION_ONLY
00333 
00334 MIRROR_NAMESPACE_END
00335 
00336 #endif //include guard
00337 

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.