diff --git a/include/tr/event_subject.h b/include/tr/event_subject.h index 48f96b7..1b1c9bb 100644 --- a/include/tr/event_subject.h +++ b/include/tr/event_subject.h @@ -28,7 +28,9 @@ #include "trbase.h" -TR_CLASS(TR_EventSubject) {}; +TR_CLASS(TR_EventSubject) { + size_t emitted; +}; TR_INSTANCE_INIT(TR_EventSubject); TR_CLASSVARS_DECL(TR_EventSubject) { size_t nevents; @@ -48,6 +50,8 @@ TR_CLASSVARS_DECL(TR_EventSubject) { #define TR_eventSubjectGetId(obj, idx) \ TR__eventSubjectId(TR_GET_CLASS(obj), idx) +#define TR_eventSubjectHasUnhandledEvents(es) ((es)->emitted > 0) + intptr_t TR__eventSubjectId(TR_class_ptr, size_t); TR_Event TR_eventSubjectEmit(TR_EventSubject, int, void *); diff --git a/src/event.c b/src/event.c index b17f6ed..c140c52 100644 --- a/src/event.c +++ b/src/event.c @@ -41,7 +41,12 @@ eventCtor(void * _this, va_list * params) return 0; } -static void eventDtor(void * _this) {} +static void eventDtor(void * _this) +{ + TR_Event this = _this; + + this->subject->emitted--; +} TR_INIT_IFACE(TR_Class, eventCtor, eventDtor, NULL); TR_CREATE_CLASS(TR_Event, NULL, NULL, TR_IF(TR_Class)) = { 0 }; diff --git a/src/event_subject_emit.c b/src/event_subject_emit.c index 55bf449..283699f 100644 --- a/src/event_subject_emit.c +++ b/src/event_subject_emit.c @@ -38,6 +38,8 @@ TR_eventSubjectEmit(TR_EventSubject this, int idx, void * data) TR_eventSetData(event, data); } + this->emitted++; + return event; }