Causes an event to call all of the functions subscribed to it.
void event_trigger(Event* event, ...);
void GDS_EVENT_TRIGGER(GdsEvent* event, event_signature, ...)
Name | Type | Description |
---|---|---|
event | Event* | A pointer to the event. |
event_signature | function_signature | The signature of the functions called by the event. |
… | … | The arguments to pass to the functions. |
The arguments passed to this function will be strongly typed if the event was created using one of the EVENT_DEFINE_#_H
macros.
When triggering a generic event, the function signature is needed as well. There are two helper macros to make this easier:
You can, however, always just write the function signature manually.
The following lines are equivalent to each other:
void (*)(void*, char*)
GDS_EVENT_SIGNATURE(char*)
Strongly Typed:
EVENT_DEFINE_1_H(StringEvent, str_event, char*)
EVENT_DEFINE_C(StringEvent, str_event)
static void print_string(void* ctx, char* str) {
puts(str);
}
static void print_context_and_string(void* ctx, char* str) {
printf("%s%s\n", (char*)ctx, str);
}
StringEvent* event = str_event_create();
str_event_subscribe(event, NULL, print_string);
str_event_subscribe(event, "Hello ", print_context_and_string);
str_event_trigger(event, "World");
str_event_free(event);
// Output:
// World
// Hello World
Generically Typed:
static void print_string(void* ctx, char* str) {
puts(str);
}
GdsEvent* event = gds_event_create();
gds_event_subscribe(event, NULL, print_string);
GDS_EVENT_TRIGGER(event, GDS_EVENT_SIGNATURE(char*), "Hello World");
gds_event_free(event);
// Output:
// Hello World