Mirror reflection library 0.5.13

mirror/doc/concepts.hpp

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

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.