|
|
@ -35,20 +35,36 @@ TR_CLASS(TR_EventHandler); |
|
|
|
|
|
|
|
|
#include "tr/event_dispatcher.h" |
|
|
#include "tr/event_dispatcher.h" |
|
|
|
|
|
|
|
|
typedef int (* TR_EventMethod_fptr)(TR_Event); |
|
|
|
|
|
|
|
|
typedef int (* TR_EventMethod_fptr)(TR_EventHandler, TR_Event); |
|
|
|
|
|
|
|
|
TR_CLASS(TR_EventHandler) { |
|
|
TR_CLASS(TR_EventHandler) { |
|
|
TR_EventDispatcher dispatcher[10]; |
|
|
TR_EventDispatcher dispatcher[10]; |
|
|
size_t ndispatcher; |
|
|
size_t ndispatcher; |
|
|
TR_Hash event_methods; |
|
|
|
|
|
}; |
|
|
}; |
|
|
TR_INSTANCE_INIT(TR_EventHandler); |
|
|
TR_INSTANCE_INIT(TR_EventHandler); |
|
|
TR_CLASSVARS_DECL(TR_EventHandler) {}; |
|
|
|
|
|
|
|
|
TR_CLASSVARS_DECL(TR_EventHandler) { |
|
|
|
|
|
TR_Hash event_methods; |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
void TR_eventHandlerSetDispatcher(TR_EventHandler, TR_EventDispatcher); |
|
|
void TR_eventHandlerSetDispatcher(TR_EventHandler, TR_EventDispatcher); |
|
|
void TR_eventHandlerIssueEvent(TR_EventHandler, TR_EventSubject, int, void *); |
|
|
void TR_eventHandlerIssueEvent(TR_EventHandler, TR_EventSubject, int, void *); |
|
|
int TR_eventHandlerHandleEvent(TR_EventHandler, TR_Event); |
|
|
int TR_eventHandlerHandleEvent(TR_EventHandler, TR_Event); |
|
|
|
|
|
|
|
|
|
|
|
#define TR_EVENT_HANDLER_SET_METHOD(cls, subject, id, method) \ |
|
|
|
|
|
do { \ |
|
|
|
|
|
intptr_t key = TR_eventSubjectId(subject, id); \ |
|
|
|
|
|
TR_EventMethod_fptr event_func = (method); \ |
|
|
|
|
|
TR_hashAdd( \ |
|
|
|
|
|
TR_CLASSVARS(TR_EventHandler, cls)->event_methods, \ |
|
|
|
|
|
TR_new( \ |
|
|
|
|
|
TR_HashValue, \ |
|
|
|
|
|
&key, \ |
|
|
|
|
|
sizeof(intptr_t), \ |
|
|
|
|
|
&event_func, \ |
|
|
|
|
|
sizeof(TR_EventMethod_fptr))); \ |
|
|
|
|
|
} while(0) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif // __TR_EVENT_HANDLER_H__ |
|
|
#endif // __TR_EVENT_HANDLER_H__ |
|
|
|
|
|
|
|
|
// vim: set ts=4 sw=4: |
|
|
// vim: set ts=4 sw=4: |
|
|
|