static void stream_emitEvent(dyad_Stream *stream, dyad_Event *e) { int i; e->stream = stream; for (i = 0; i < stream->listeners.length; i++) { Listener *listener = &stream->listeners.data[i]; if (listener->event == e->type) { e->udata = listener->udata; listener->callback(e); } /* Check to see if this listener was removed: If it was we decrement `i` * since the next listener will now be in this ones place */ if (listener != &stream->listeners.data[i]) { i--; } } }
void listener_notify(gpointer data) { Listener* listener = data; MAGIC_ASSERT(listener); listener->callback(listener->data, listener->callbackArgument); }