Mirror reflection library 0.5.13

mirror/by_name.hpp

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

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.