File kernel/src/utils/SiconosTools/VisitorMaker.hpp

Go to the source code of this file

Generation of visitors on base classes.

Defines

REGISTER(X)
REGISTER_STRUCT(X)
REGISTER_BASE(X, Y)
REGISTER_BASE_EXTERN(X, Y)
REGISTER(X)
REGISTER_STRUCT(X)
REGISTER_BASE(X, Y)
REGISTER_BASE_EXTERN(X, Y)
namespace Experimental
struct TypeNotFound
template<typename T, typename Action, typename BaseType>
struct Call : public Action

Public Types

typedef Call<T, Action, BaseType> type

Public Functions

inline virtual void visit(const T &x)
template<typename T, typename Action>
struct Call<T, Action, TypeNotFound> : public Action

Public Types

typedef Call<T, Action, TypeNotFound> type

Public Functions

inline virtual void visit(const T &x)
template<typename T, typename Pred>
class VisitMaker

Public Types

typedef Call<T, typename Pred::Action, BaseType>::type Action

Private Types

typedef boost::mpl::fold<typename Pred::Action::Base, TypeNotFound, boost::mpl::if_<boost::is_base_of<boost::mpl::_2, T>, boost::mpl::_2, boost::mpl::_1>>::type BaseType
template<typename T>
struct GlobalVisitor
struct empty
template<typename T1 = empty, typename T2 = empty, typename T3 = empty, typename T4 = empty, typename T5 = empty, typename T6 = empty, typename T7 = empty, typename T8 = empty, typename T9 = empty>
struct Classes

Public Types

typedef boost::mpl::vector<T1, T2, T3, T4, T5, T6, T7, T8, T9> Base
template<typename T1>
struct Classes<T1, empty, empty, empty, empty, empty, empty, empty, empty>

Public Types

typedef boost::mpl::vector<T1> Base
template<typename T1, typename T2>
struct Classes<T1, T2, empty, empty, empty, empty, empty, empty, empty>

Public Types

typedef boost::mpl::vector<T1, T2> Base
template<typename T1, typename T2, typename T3>
struct Classes<T1, T2, T3, empty, empty, empty, empty, empty, empty>

Public Types

typedef boost::mpl::vector<T1, T2, T3> Base
template<typename T1, typename T2, typename T3, typename T4>
struct Classes<T1, T2, T3, T4, empty, empty, empty, empty, empty>

Public Types

typedef boost::mpl::vector<T1, T2, T3, T4> Base
template<typename T1, typename T2, typename T3, typename T4, typename T5>
struct Classes<T1, T2, T3, T4, T5, empty, empty, empty, empty>

Public Types

typedef boost::mpl::vector<T1, T2, T3, T4, T5> Base
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
struct Classes<T1, T2, T3, T4, T5, T6, empty, empty, empty>

Public Types

typedef boost::mpl::vector<T1, T2, T3, T4, T5, T6> Base
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
struct Classes<T1, T2, T3, T4, T5, T6, T7, empty, empty>

Public Types

typedef boost::mpl::vector<T1, T2, T3, T4, T5, T6, T7> Base
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
struct Classes<T1, T2, T3, T4, T5, T6, T7, T8, empty>

Public Types

typedef boost::mpl::vector<T1, T2, T3, T4, T5, T6, T7, T8> Base
template<typename C, typename T>
struct Filter

Public Types

typedef boost::mpl::fold<typename C::Base, _T, VisitMaker<boost::mpl::_2, boost::mpl::_1>>::type Make
struct _T : public T, public C

Public Types

typedef _T Action
template<typename C, typename T>
struct Visitor

Public Types

typedef Filter<C, T>::Make LocalFilter
typedef GlobalVisitor<LocalFilter>::Make Make