Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 1, 2008, 1:48:57 PM (15 years ago)
Author:
landauf
Message:
  • simplified some event code
  • prevents infinite event loops
  • fixed some leaky memory behavior in XMLPort and EventIncludes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/objecthierarchy/src/core/EventIncludes.h

    r2072 r2082  
    3434
    3535#define SetEvent(classname, eventname, functionname, event) \
    36     SetEventGeneric(eventcontainer##classname##functionname, classname, eventname, orxonox::createExecutor(orxonox::createFunctor(&classname::functionname), std::string( #classname ) + "::" + #functionname), event, BaseObject)
     36    SetEventGeneric(eventcontainer##classname##functionname, classname, eventname, functionname, event, BaseObject)
    3737
    3838#define SetEventTemplate(classname, eventname, functionname, event, ...) \
    39     SetEventGeneric(eventcontainer##classname##functionname, classname, eventname, orxonox::createExecutor(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::functionname), std::string( #classname ) + "::" + #functionname), event, BaseObject)
     39    SetEventGenericTemplate(eventcontainer##classname##functionname, classname, eventname, functionname, event, BaseObject, __VA_ARGS__)
    4040
    4141#define SetSubclassEvent(classname, eventname, functionname, event, subclassname) \
    42     SetEventGeneric(eventcontainer##classname##functionname, classname, eventname, orxonox::createExecutor(orxonox::createFunctor(&classname::functionname), std::string( #classname ) + "::" + #functionname), event, subclassname)
     42    SetEventGeneric(eventcontainer##classname##functionname, classname, eventname, functionname, event, subclassname)
    4343
    4444#define SetSubclassEventTemplate(classname, eventname, functionname, event, subclassname, ...) \
    45     SetEventGeneric(eventcontainer##classname##functionname, classname, eventname, orxonox::createExecutor(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::functionname), std::string( #classname ) + "::" + #functionname), event, subclassname)
     45    SetEventGenericTemplate(eventcontainer##classname##functionname, classname, eventname, functionname, event, subclassname, __VA_ARGS__)
    4646
    47 #define SetEventGeneric(containername, classname, eventname, executor, event, subclassname) \
     47#define SetEventGeneric(containername, classname, eventname, functionname, event, subclassname) \
    4848    orxonox::EventContainer* containername = this->getEventContainer(eventname); \
    4949    if (!containername) \
    5050    { \
    51         containername = new orxonox::ClassEventContainer<classname>(std::string(eventname), executor, orxonox::ClassIdentifier<subclassname>::getIdentifier()); \
     51        ExecutorMember<classname>* executor = orxonox::createExecutor(orxonox::createFunctor(&classname::functionname), std::string( #classname ) + "::" + #functionname); \
     52        executor->setObject(this); \
     53        containername = new orxonox::EventContainer(std::string(eventname), executor, orxonox::ClassIdentifier<subclassname>::getIdentifier()); \
     54        this->addEventContainer(eventname, containername); \
     55    } \
     56    event.castedOriginator_ = dynamic_cast<subclassname*>(event.originator_); \
     57    containername->process(this, event)
     58
     59#define SetEventGenericTemplate(containername, classname, eventname, functionname, event, subclassname, ...) \
     60    orxonox::EventContainer* containername = this->getEventContainer(eventname); \
     61    if (!containername) \
     62    { \
     63        ExecutorMember<classname>* executor = orxonox::createExecutor(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::functionname), std::string( #classname ) + "::" + #functionname); \
     64        executor->setObject(this); \
     65        containername = new orxonox::EventContainer(std::string(eventname), executor, orxonox::ClassIdentifier<subclassname>::getIdentifier()); \
    5266        this->addEventContainer(eventname, containername); \
    5367    } \
Note: See TracChangeset for help on using the changeset viewer.