Mirror reflection library 0.5.13
|
00001 00010 #ifndef MIRROR_DOC_CONCEPTS_1011291729_HPP 00011 #define MIRROR_DOC_CONCEPTS_1011291729_HPP 00012 00013 #include <mirror/config.hpp> 00014 #include <mirror/doc/concepts_fwd.hpp> 00015 00016 // This section is here for documentation purposes only 00017 #ifdef MIRROR_DOCUMENTATION_ONLY 00018 00026 MIRROR_NAMESPACE_BEGIN 00027 00029 00036 struct MetaObject 00037 { 00039 00044 friend struct is_a<MetaObject, ConceptTag>; 00045 00050 friend meta_object_tag categorize_meta_object(MetaObject); 00051 }; 00052 00054 00066 struct MetaNamedObject 00067 : virtual public MetaObject 00068 { 00070 00074 static std::string base_name(void); 00075 00079 friend meta_named_object_tag categorize_meta_object(MetaNamedObject); 00080 }; 00081 00083 00091 struct MetaMetaObject 00092 : virtual public MetaNamedObject 00093 { 00095 00100 static std::string construct_name(void); 00101 00103 00111 friend struct generalizations<MetaMetaObject>; 00112 00114 00122 typedef unspecified_type category; 00123 00127 friend meta_meta_object_tag 00128 categorize_meta_object(MetaMetaObject); 00129 }; 00130 00131 00133 00140 struct MetaScopedObject 00141 : virtual public MetaObject 00142 { 00144 00149 typedef MetaScope scope; 00150 00152 00157 friend struct scope<MetaScopedObject>; 00158 00162 friend meta_scoped_object_tag categorize_meta_object(MetaScopedObject); 00163 }; 00164 00166 00173 struct MetaNamedScopedObject 00174 : virtual public MetaNamedObject 00175 , virtual public MetaScopedObject 00176 { 00178 00182 static std::string full_name(void); 00183 00185 00194 static std::string local_name(void); 00195 00199 friend meta_named_scoped_object_tag 00200 categorize_meta_object(MetaNamedScopedObject); 00201 }; 00202 00204 00211 struct MetaScope 00212 : virtual public MetaNamedScopedObject 00213 { 00214 00221 friend struct members<MetaScope>; 00222 00226 friend meta_scope_tag categorize_meta_object(MetaScope); 00227 }; 00228 00230 00237 struct MetaNamespace 00238 : virtual public MetaScope 00239 { 00241 typedef MetaNamespace scope; 00242 00249 friend struct namespaces<MetaNamespace>; 00250 00257 friend struct free_variables<MetaNamespace>; 00258 00265 friend struct free_functions<MetaNamespace>; 00266 00270 friend meta_namespace_tag categorize_meta_object(MetaNamespace); 00271 }; 00272 00274 00281 struct MetaGlobalScope 00282 : virtual public MetaNamespace 00283 { 00285 typedef MetaGlobalScope scope; 00286 00290 friend meta_global_scope_tag categorize_meta_object(MetaNamespace); 00291 }; 00292 00294 00301 struct MetaType 00302 : virtual public MetaNamedScopedObject 00303 { 00305 typedef unspecified_type original_type; 00306 00308 00312 friend struct original_type<MetaType>; 00313 00331 friend struct apply_modifier<MetaType, ModifierLambdaExpression>; 00332 00339 friend struct constructors<MetaClass>; 00340 00342 00347 friend struct container_kind<MetaType>; 00348 00356 friend struct containers<MetaType>; 00357 00359 00383 friend int traverse_elements( 00384 MetaType meta_type, 00385 MetaType::original_type& container, 00386 TernaryFunctor elem_func, 00387 BinaryFunctor empty_func 00388 ); 00389 00393 friend meta_type_tag categorize_meta_object(MetaType); 00394 }; 00395 00397 00403 struct MetaTypedef 00404 : virtual public MetaType 00405 { 00407 typedef MetaType type; 00408 00412 friend meta_typedef_tag categorize_meta_object(MetaTypedef); 00413 }; 00414 00416 00423 struct MetaTemplatedType 00424 : virtual public MetaType 00425 { 00432 typedef MetaTypeTemplate type_template; 00433 00435 00440 friend struct type_template<MetaTemplatedType>; 00441 00449 friend struct template_parameters<MetaTemplatedType>; 00450 00454 friend meta_templated_type_tag 00455 categorize_meta_object(MetaTemplatedType); 00456 }; 00457 00459 00466 struct MetaTypeTemplate 00467 : virtual public MetaNamedScopedObject 00468 { 00470 00474 template <typename ... P> 00475 struct reflected_template 00476 { 00478 typedef unspecified_type type; 00479 }; 00480 00481 00485 friend meta_type_template_tag 00486 categorize_meta_object(MetaTypeTemplate); 00487 }; 00488 00490 00496 struct MetaClass 00497 : virtual public MetaType 00498 , virtual public MetaScope 00499 { 00501 00507 typedef ElaboratedTypeTag elaborated_type; 00508 00510 00515 friend struct elaborated_type<MetaClass>; 00516 00523 friend struct base_classes<MetaClass>; 00524 00533 friend struct member_variables<MetaClass>; 00534 00543 friend struct all_member_variables<MetaClass>; 00544 00553 friend struct member_functions<MetaClass>; 00554 00563 friend struct all_member_functions<MetaClass>; 00564 00565 00574 friend struct all_containers<MetaClass>; 00575 00579 friend meta_class_tag categorize_meta_object(MetaClass); 00580 }; 00581 00583 00589 struct MetaClassMember 00590 : virtual public MetaNamedScopedObject 00591 { 00593 typedef MetaClass scope; 00594 00596 00601 friend struct scope<MetaClassMember>; 00602 00604 00609 typedef AccessTypeTag access_type; 00610 00612 00617 friend struct access_type<MetaClassMember>; 00618 00622 friend meta_class_member_tag categorize_meta_object(MetaClassMember); 00623 }; 00624 00626 00632 struct MetaTemplatedClass 00633 : virtual public MetaTemplatedType 00634 , virtual public MetaClass 00635 { 00636 00640 friend meta_templated_class_tag 00641 categorize_meta_object(MetaTemplatedClass); 00642 }; 00643 00645 00651 struct MetaEnum 00652 : virtual public MetaType 00653 , virtual public MetaScope 00654 { 00661 friend struct enum_values<MetaClass>; 00662 00664 typedef IntegralConstantType size; 00665 00667 00672 friend struct enum_size<MetaEnum>; 00673 00675 static UnspecifiedEnumType value(IntegralConstantType index); 00676 00678 static UnspecifiedEnumType value(int index); 00679 00681 static std::string value_name(IntegralConstantType index); 00682 00684 static std::string value_name(int index); 00685 00687 static std::string name_by_value(Enum x); 00688 00690 static Enum value_by_name(const std::string& name); 00691 00693 static bool has_value_name(const std::string& name); 00694 00698 friend meta_enum_tag 00699 categorize_meta_object(MetaEnum); 00700 }; 00701 00703 00709 struct MetaEnumValue 00710 : virtual public MetaNamedScopedObject 00711 { 00713 typedef MetaEnum scope; 00714 00716 typedef IntegralConstantType value; 00717 00721 friend meta_enum_value_tag 00722 categorize_meta_object(MetaEnumValue); 00723 }; 00724 00726 00732 struct MetaInheritance 00733 : virtual public MetaObject 00734 { 00736 typedef MetaClass derived_class; 00737 00739 00744 friend struct derived_class<MetaInheritance>; 00745 00747 00752 typedef InheritanceTypeTag inheritance_type; 00753 00755 00760 friend struct inheritance_type<MetaInheritance>; 00761 00763 00768 typedef AccessTypeTag access_type; 00769 00771 00776 friend struct access_type<MetaInheritance>; 00777 00779 typedef MetaClass base_class; 00780 00782 00787 friend struct base_class<MetaInheritance>; 00788 00792 friend meta_inheritance_tag categorize_meta_object(MetaInheritance); 00793 }; 00794 00795 00797 00804 struct MetaVariable 00805 : virtual public MetaNamedScopedObject 00806 { 00808 00813 typedef StorageClassTag storage_class; 00814 00816 00821 friend struct storage_class<MetaVariable>; 00822 00824 typedef MetaType type; 00825 00827 00832 friend struct type_of<MetaVariable>; 00833 00837 friend meta_variable_tag 00838 categorize_meta_object(MetaVariable); 00839 }; 00840 00842 00848 struct MetaFreeVariable 00849 : virtual public MetaVariable 00850 { 00852 typedef MetaNamespace scope; 00853 00855 00860 static Type get(void); 00861 00863 00872 static void set(Type new_value); 00873 00877 friend meta_free_variable_tag 00878 categorize_meta_object(MetaFreeVariable); 00879 }; 00880 00882 00888 struct MetaPlainFreeVariable 00889 : virtual public MetaFreeVariable 00890 { 00892 00897 static Type* address(void); 00898 00902 friend meta_plain_free_variable_tag 00903 categorize_meta_object(MetaPlainFreeVariable); 00904 }; 00905 00907 00913 struct MetaMemberVariable 00914 : virtual public MetaClassMember 00915 , virtual public MetaVariable 00916 { 00918 00927 static Type get(const Class& instance); 00928 00930 00944 static void set(Class& instance, Type new_value); 00945 00949 friend meta_member_variable_tag 00950 categorize_meta_object(MetaMemberVariable); 00951 }; 00952 00954 00960 struct MetaPlainMemberVariable 00961 : virtual public MetaMemberVariable 00962 { 00964 static ptrdiff_t offset(void); 00965 00967 00975 static Type* address(Class& instance); 00976 00977 static const Type* address(const Class& instance); 00978 00980 static MemberVariablePointer member_pointer(void); 00981 00985 friend meta_plain_member_variable_tag 00986 categorize_meta_object(MetaPlainMemberVariable); 00987 }; 00988 00990 00996 struct MetaParameter 00997 : virtual public MetaVariable 00998 { 01000 typedef IntegralConstantType position; 01001 01003 01008 friend struct parameter_position<MetaParameter>; 01009 01013 friend meta_parameter_tag 01014 categorize_meta_object(MetaParameter); 01015 }; 01016 01018 01024 struct MetaFunction 01025 : virtual public MetaScope 01026 { 01028 typedef MetaType result_type; 01029 01031 01036 friend struct result_type<MetaFunction>; 01037 01039 01042 typedef StorageClassTag storage_class; 01043 01045 01048 typedef StorageClassTag linkage; 01049 01051 01056 friend struct linkage<MetaFunction>; 01057 01059 01064 friend struct parameters<MetaFunction>; 01065 01069 friend meta_function_tag 01070 categorize_meta_object(MetaFunction); 01071 }; 01072 01074 01080 struct MetaMemberFunction 01081 : virtual public MetaClassMember 01082 , virtual public MetaFunction 01083 { 01084 01086 01089 typedef ConstnessTag constness; 01090 01092 01097 friend struct constness<MetaMemberFunction>; 01098 01102 friend meta_member_function_tag 01103 categorize_meta_object(MetaMemberFunction); 01104 }; 01105 01107 01113 struct MetaConstructor 01114 : virtual public MetaFunction 01115 , virtual public MetaClassMember 01116 { 01117 01119 typedef MetaType result_type; 01120 01124 friend meta_constructor_tag 01125 categorize_meta_object(MetaConstructor); 01126 }; 01127 01129 01135 struct MetaConversionOperator 01136 : virtual public MetaMemberFunction 01137 { 01138 01142 friend meta_conversion_operator_tag 01143 categorize_meta_object(MetaConversionOperator); 01144 }; 01145 01147 01153 struct MetaOverloadedFunctions 01154 : virtual public MetaNamedScopedObject 01155 { 01157 01164 friend struct overloads<MetaOverloadedFunctions>; 01165 }; 01166 01167 MIRROR_NAMESPACE_END 01168 01169 #endif // MIRROR_DOCUMENTATION_ONLY 01170 01171 #endif //include guard 01172