Mirror reflection library 0.5.13
|
00001 00011 #ifndef MIRROR_BY_NAME_1012132135_HPP 00012 #define MIRROR_BY_NAME_1012132135_HPP 00013 00014 #include <mirror/mirror_fwd.hpp> 00015 #include <mirror/auxiliary/by_name.hpp> 00016 #include <mirror/meta_prog/as_a.hpp> 00017 #include <mirror/meta_prog/range.hpp> 00018 #include <mirror/meta_object_tags.hpp> 00019 00020 MIRROR_NAMESPACE_BEGIN 00021 00022 template <class MetaVariables> 00023 struct by_name : aux::by_name_hlpr<typename MetaVariables::type> 00024 { }; 00025 00026 template <class MetaNamespaceExpr> 00027 struct free_variables_by_name; 00028 00029 template <class X> 00030 struct free_variables_by_name<meta_namespace<X> > 00031 : by_name<typename free_variables<meta_namespace<X> >::type> 00032 { }; 00033 00034 template <class MetaNamespaceExpr> 00035 struct free_variables_by_name : free_variables_by_name< 00036 typename mp::as_a< 00037 MetaNamespaceExpr, 00038 meta_namespace_tag 00039 >::type 00040 >{ }; 00041 00042 template <class MetaClassExpr> 00043 struct member_variables_by_name; 00044 00045 template <class Class> 00046 struct member_variables_by_name<meta_class<Class> > 00047 : by_name<typename member_variables<meta_class<Class> >::type> 00048 { }; 00049 00050 template <class MetaClassExpr> 00051 struct member_variables_by_name : member_variables_by_name< 00052 typename mp::as_a< 00053 MetaClassExpr, 00054 meta_class_tag 00055 >::type 00056 >{ }; 00057 00058 template <class MetaClassExpr> 00059 struct all_member_variables_by_name; 00060 00061 template <class Class> 00062 struct all_member_variables_by_name<meta_class<Class> > 00063 : by_name<typename all_member_variables<meta_class<Class> >::type> 00064 { }; 00065 00066 template <class MetaClassExpr> 00067 struct all_member_variables_by_name : all_member_variables_by_name< 00068 typename mp::as_a< 00069 MetaClassExpr, 00070 meta_class_tag 00071 >::type 00072 >{ }; 00073 00074 00075 MIRROR_NAMESPACE_END 00076 00077 #endif //include guard 00078