13 #ifndef DtMessageMemberCall_H_
14 #define DtMessageMemberCall_H_
22 #include <boost/type_traits.hpp>
27 template <
typename T,
bool isPo
inter,
bool isDriver>
30 typedef typename boost::remove_const<typename boost::remove_reference<T>::type>::type
Result;
44 typedef typename boost::remove_pointer<typename boost::remove_const<T>::type>::type
TClass;
46 enum {
IsObject = boost::is_class<typename boost::remove_pointer<T>::type>::value};
53 template <
typename DesiredType>
111 de.DT_LOG_WARN << ex << std::endl;
115 de.DT_LOG_WARN <<
"Caught unknown exception" << std::endl;
128 #define DT_DEFINE_MESSAGE_MEMBER_CALL(argCount)\
129 template < class C, MAKE_LIST(typename T,argCount) >\
130 class DtMessageMemberCall##argCount : public DtMessageMemberCall<C>\
133 typedef void (C::*MemberFuncPtr)( MAKE_LIST(T,argCount) );\
134 DtMessageMemberCall##argCount(MemberFuncPtr m) \
138 virtual void call(DtDe& de, C* c,DtMessage& msg)\
140 MAKE_DECL_MULTILIST(typename CleanupType<T,>::Result a,argCount);\
141 msg >> MAKE_STREAMOUT(a,argCount);\
144 (c->*myFunc)(MAKE_CAST_CALL(Cast<T,>::toFunctionType,de,a,argCount));\
146 catch(DtException& ex)\
148 de.DT_LOG_WARN << ex << std::endl;\
152 de.DT_LOG_WARN << "Caught unknown exception" << std::endl;\
155 MemberFuncPtr myFunc;\
158 template <class C, MAKE_LIST(typename T,argCount) >\
159 DtMessageMemberCall<C>* bindMember(void (C::*m)( MAKE_LIST(T,argCount) ))\
161 return new DtMessageMemberCall##argCount<C, MAKE_LIST(T,argCount) >(m);\
176 #define DtMessageMemberCall_INL_
177 #include "DtMessageMemberCall.inl"
178 #undef DtMessageMemberCall_INL_
virtual void call(DtDe &de, C *c, DtMessage &msg)=0
MemberFuncPtr myFunc
Definition: DtMessageMemberCall.h:118
static DtUniqueID toFunctionType(DtDe &, DtUniqueID input)
Definition: DtMessageMemberCall.h:78
The IGI Message.
Definition: DtMessage.h:33
Abstract base class for object updaters.
Definition: DtAgentUpdateResolverInterface.h:23
Definition: DtMessageMemberCall.h:28
DtMessageMemberCall0(MemberFuncPtr m)
Definition: DtMessageMemberCall.h:101
DtMessageMemberCall< C > * bindMember(void(C::*m)())
Definition: DtMessageMemberCall.h:122
Contains makVrv::DtDe class.
StorageType< T, boost::is_pointer< T >::value, IsObject >::Result Result
Definition: DtMessageMemberCall.h:49
DtAgentManager & agentManager()
Get the scene manager.
#define DT_DEFINE_MESSAGE_MEMBER_CALL(argCount)
Definition: DtMessageMemberCall.h:128
DtUniqueID Result
Definition: DtMessageMemberCall.h:36
boost::remove_pointer< typename boost::remove_const< T >::type >::type TClass
Definition: DtMessageMemberCall.h:44
virtual DtAgentUpdateResolverInterface * findUpdater(DtUniqueID id)
Find the update handler for a particular object id.
Contains makVrv:DtAgentManager class.
void(C::* MemberFuncPtr)()
Definition: DtMessageMemberCall.h:99
Definition: DtMessageMemberCall.h:54
Special case for a function with zero arguments.
Definition: DtMessageMemberCall.h:96
virtual void call(DtDe &de, C *c, DtMessage &msg)
Definition: DtMessageMemberCall.h:103
static DesiredType toFunctionType(DtDe &, DesiredType input)
Definition: DtMessageMemberCall.h:56
unsigned long long DtUniqueID
Definition: DtUniqueID.h:22
Definition: DtMessageMemberCall.h:46
Contains makVrv:DtAgent class.
Abstract base class with wraps a member call with it's arguments stored in a message.
Definition: DtMessageMemberCall.h:87
Definition: DtMessageMemberCall.h:40
boost::remove_const< typename boost::remove_reference< T >::type >::type Result
Definition: DtMessageMemberCall.h:30
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
virtual void * objectMemoryAddress() const =0
Abstract getting the object memory address necessary for casting the ObjectType.
static DesiredType toFunctionType(DtDe &de, DtUniqueID input)
Definition: DtMessageMemberCall.h:61
Contains DLL export macros.