Changeset 5879 for code/branches/core5/src/libraries/core/EventIncludes.h
- Timestamp:
- Oct 5, 2009, 5:02:25 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/core5/src/libraries/core/EventIncludes.h
r5866 r5879 33 33 #include "Executor.h" 34 34 35 #define ORXONOX_SET_EVENT(classname, eventname, functionname, event) \ 36 ORXONOX_SET_EVENT_GENERIC(eventcontainer##classname##functionname, classname, eventname, functionname, event, BaseObject) 35 /** 36 @brief Defines a new event state (a state of the object which can be changed by events). 37 38 @param classname The name of this class 39 @param subclassname Usually BaseObject - if different, only instances of this class can send events to this object 40 @param statename The name (string) of this state 41 @param function The function which should be used to set the state 42 @param xmlelement Argument for XMLPort 43 @param mode Argument for XMLPort 44 */ 45 #define XMLPortEventState(classname, subclassname, statename, function, xmlelement, mode) \ 46 orxonox::EventState* containername##function = this->getEventState(statename); \ 47 if (!containername##function) \ 48 { \ 49 containername##function = new orxonox::EventState(orxonox::createFunctor(&classname::function, this), orxonox::ClassIdentifier<subclassname>::getIdentifier()); \ 50 this->addEventState(statename, containername##function); \ 51 } \ 52 XMLPortEventStateIntern(xmlportevent##function, classname, statename, xmlelement, mode) 37 53 38 #define ORXONOX_SET_EVENT_TEMPLATE(classname, eventname, functionname, event, ...) \ 39 ORXONOX_SET_EVENT_GENERIC_TEMPLATE(eventcontainer##classname##functionname, classname, eventname, functionname, event, BaseObject, __VA_ARGS__) 54 /** 55 @brief Like XMLPortEventState but with additional template arguments to identify the function of the state (if ambiguous). 56 */ 57 #define XMLPortEventStateTemplate(classname, subclassname, statename, function, xmlelement, mode, ...) \ 58 orxonox::EventState* containername##function = this->getEventState(statename); \ 59 if (!containername##function) \ 60 { \ 61 containername##function = new orxonox::EventState(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::function, this), orxonox::ClassIdentifier<subclassname>::getIdentifier()); \ 62 this->addEventState(statename, containername##function); \ 63 } \ 64 XMLPortEventStateIntern(xmlportevent##function, classname, statename, xmlelement, mode) 40 65 41 #define ORXONOX_SET_SUBCLASS_EVENT(classname, eventname, functionname, event, subclassname) \ 42 event.castedOriginator_ = orxonox::orxonox_cast<subclassname*>(event.originator_); \ 43 ORXONOX_SET_EVENT_GENERIC(eventcontainer##classname##functionname, classname, eventname, functionname, event, subclassname) 44 45 #define ORXONOX_SET_SUBCLASS_EVENT_TEMPLATE(classname, eventname, functionname, event, subclassname, ...) \ 46 event.castedOriginator_ = orxonox::orxonox_cast<subclassname*>(event.originator_); \ 47 ORXONOX_SET_EVENT_GENERIC_TEMPLATE(eventcontainer##classname##functionname, classname, eventname, functionname, event, subclassname, __VA_ARGS__) 48 49 #define ORXONOX_SET_EVENT_GENERIC(containername, classname, eventname, functionname, event, subclassname) \ 50 orxonox::EventContainer* containername = this->getEventContainer(eventname); \ 51 if (!containername) \ 52 { \ 53 Functor* functor = orxonox::createFunctor(&classname::functionname, this); \ 54 containername = new orxonox::EventContainer(std::string(eventname), functor, orxonox::ClassIdentifier<subclassname>::getIdentifier()); \ 55 this->addEventContainer(eventname, containername); \ 56 } \ 57 containername->process(this, event) 58 59 #define ORXONOX_SET_EVENT_GENERIC_TEMPLATE(containername, classname, eventname, functionname, event, subclassname, ...) \ 60 orxonox::EventContainer* containername = this->getEventContainer(eventname); \ 61 if (!containername) \ 62 { \ 63 Functor* functor = orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::functionname, this); \ 64 containername = new orxonox::EventContainer(std::string(eventname), functor, orxonox::ClassIdentifier<subclassname>::getIdentifier()); \ 65 this->addEventContainer(eventname, containername); \ 66 } \ 67 containername->process(this, event) 68 66 #define XMLPortEventStateIntern(name, classname, statename, xmlelement, mode) \ 67 static orxonox::ExecutorMember<classname>* xmlsetfunctor##name = (orxonox::ExecutorMember<classname>*)&orxonox::createExecutor(orxonox::createFunctor(&classname::addEventSource), std::string( #classname ) + "::" + "addEventSource" + "(" + statename + ")")->setDefaultValue(1, statename); \ 68 static orxonox::ExecutorMember<classname>* xmlgetfunctor##name = (orxonox::ExecutorMember<classname>*)&orxonox::createExecutor(orxonox::createFunctor(&classname::getEventSource), std::string( #classname ) + "::" + "getEventSource" + "(" + statename + ")")->setDefaultValue(1, statename); \ 69 XMLPortObjectGeneric(xmlport##name, classname, orxonox::BaseObject, statename, xmlsetfunctor##name, xmlgetfunctor##name, xmlelement, mode, false, true) 70 69 71 #endif /* _EventIncludes_H__ */
Note: See TracChangeset
for help on using the changeset viewer.