Mirror reflection library 0.5.13
|
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