MACE  1.0.0
 All Classes Namespaces Files Functions Variables Enumerations Defines
Classes | Namespaces | Defines
libs/reflect/include/mace/reflect/reflect.hpp File Reference

Defines types and macros used to provide reflection. More...

#include <boost/static_assert.hpp>
#include <boost/preprocessor/seq/for_each_i.hpp>
#include <boost/preprocessor/seq/for_each.hpp>
#include <boost/preprocessor/seq/enum.hpp>
#include <boost/preprocessor/seq/seq.hpp>
#include <boost/preprocessor/stringize.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/preprocessor/facilities/empty.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/typeof/typeof.hpp>
#include <boost/type_traits/remove_pointer.hpp>
#include <string>
#include <typeinfo>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <stdint.h>
#include <boost/fusion/container/vector.hpp>
#include <boost/function_types/result_type.hpp>
#include <mace/reflect/void.hpp>
#include <mace/reflect/typeinfo.hpp>

Go to the source code of this file.

Classes

struct  mace::reflect::reflector< T >
 defines visit functions for T Unless this is specialized, visit() will not be defined for T. More...

Namespaces

namespace  mace::reflect
 types, methods associated with the MACE.Reflect Library

Defines

#define MACE_REFLECT_VISIT_BASE(r, visitor, base)   mace::reflect::reflector<base>::visit( visitor );
#define TEMPLATE   template
#define MACE_REFLECT_VISIT_MEMBER(r, visitor, elem)   visitor.TEMPLATE operator()<BOOST_TYPEOF(&type::elem), &type::elem>( BOOST_PP_STRINGIZE(elem) );
#define MACE_REFLECT_BASE_MEMBER_COUNT(r, OP, elem)   OP mace::reflect::reflector<elem>::member_count
#define MACE_REFLECT_DERIVED_IMPL_INLINE(TYPE, INHERITS, MEMBERS)
#define MACE_REFLECT_DERIVED_IMPL_EXT(TYPE, INHERITS, MEMBERS)
#define MACE_REFLECT_DERIVED(TYPE, INHERITS, MEMBERS)
 Specializes mace::reflect::reflector for TYPE where type inherits other reflected classes.
#define MACE_REFLECT(TYPE, MEMBERS)   MACE_REFLECT_DERIVED( TYPE, BOOST_PP_SEQ_NIL, MEMBERS )
 Specializes mace::reflect::reflector for TYPE.
#define MACE_REFLECT_FWD(TYPE)
#define MACE_REFLECT_DERIVED_IMPL(TYPE, MEMBERS)   MACE_REFLECT_IMPL_DERIVED_EXT( TYPE, BOOST_PP_SEQ_NIL, MEMBERS )
#define MACE_REFLECT_IMPL(TYPE, MEMBERS)   MACE_REFLECT_DERIVED_IMPL_EXT( TYPE, BOOST_PP_SEQ_NIL, MEMBERS )

Detailed Description

Definition in file reflect.hpp.


Define Documentation

#define MACE_REFLECT (   TYPE,
  MEMBERS 
)    MACE_REFLECT_DERIVED( TYPE, BOOST_PP_SEQ_NIL, MEMBERS )
Parameters:
MEMBERS- a sequence of member names. (field1)(field2)(field3)
See also:
MACE_REFLECT_DERIVED
Examples:
examples/reflect_to_json.cpp.

Definition at line 143 of file reflect.hpp.

#define MACE_REFLECT_DERIVED (   TYPE,
  INHERITS,
  MEMBERS 
)
Value:
MACE_REFLECT_TYPEINFO(TYPE) \
namespace mace { namespace reflect { \
template<> struct reflector<TYPE> {\
    typedef TYPE type; \
    typedef boost::true_type is_defined; \
    enum  member_count_enum {  \
      local_member_count = BOOST_PP_SEQ_SIZE(MEMBERS), \
      total_member_count = local_member_count BOOST_PP_SEQ_FOR_EACH( MACE_REFLECT_BASE_MEMBER_COUNT, +, INHERITS )\
    }; \
    MACE_REFLECT_DERIVED_IMPL_INLINE( TYPE, INHERITS, MEMBERS ) \
}; } }
Parameters:
INHERITS- a sequence of base class names (basea)(baseb)(basec)
MEMBERS- a sequence of member names. (field1)(field2)(field3)

Definition at line 121 of file reflect.hpp.

#define MACE_REFLECT_DERIVED_IMPL_EXT (   TYPE,
  INHERITS,
  MEMBERS 
)
Value:
template<typename Visitor>\
void mace::reflect::reflector<TYPE>::visit( const Visitor& v ) { \
    BOOST_PP_SEQ_FOR_EACH( MACE_REFLECT_VISIT_BASE, v, INHERITS ) \
    BOOST_PP_SEQ_FOR_EACH( MACE_REFLECT_VISIT_MEMBER, v, MEMBERS ) \
}

Definition at line 103 of file reflect.hpp.

#define MACE_REFLECT_DERIVED_IMPL_INLINE (   TYPE,
  INHERITS,
  MEMBERS 
)
Value:
template<typename Visitor>\
static inline void visit( const Visitor& v ) { \
    BOOST_PP_SEQ_FOR_EACH( MACE_REFLECT_VISIT_BASE, v, INHERITS ) \
    BOOST_PP_SEQ_FOR_EACH( MACE_REFLECT_VISIT_MEMBER, v, MEMBERS ) \
}

Definition at line 96 of file reflect.hpp.

#define MACE_REFLECT_FWD (   TYPE)
Value:
MACE_REFLECT_TYPEINFO(TYPE) \
namespace mace { namespace reflect { \
template<> struct reflector<TYPE> {\
    typedef TYPE type; \
    typedef boost::true_type is_defined; \
    enum  member_count_enum {  \
      local_member_count = BOOST_PP_SEQ_SIZE(MEMBERS), \
      total_member_count = local_member_count BOOST_PP_SEQ_FOR_EACH( MACE_REFLECT_BASE_MEMBER_COUNT, +, INHERITS )\
    }; \
    typedef boost::fusion::vector<BOOST_PP_SEQ_ENUM(INHERITS)> base_class_types; \
    template<typename Visitor> static void visit( const Visitor& v ); \
}; } }

Definition at line 146 of file reflect.hpp.