Added event bus unsubscribe function.

This commit is contained in:
Ulysse Cura 2026-08-13 19:02:55 +02:00
parent 60946e130b
commit c71af2e803
2 changed files with 19 additions and 0 deletions

View File

@ -134,3 +134,21 @@ int event_bus_subscribe(event_bus_t *event_bus, size_t id, callback_t callback,
return EXIT_SUCCESS;
}
// Arg : callback_t callback
static inline bool condition_is_callback(elem_t *elem, va_list args)
{
return ((subscription_t *)elem->data)->callback == va_arg(args, callback_t);
}
int event_bus_unsubscribe(event_bus_t *event_bus, size_t id, callback_t callback)
{
elem_t *topic_elem = linked_list_get_if(&event_bus->topics, condition_is_topic_id, id);
if(!topic_elem) return_failure_int;
topic_t *topic = topic_elem->data;
if(linked_list_remove_if(&topic->subscriptions, condition_is_callback, callback)) return_failure_int;
return EXIT_SUCCESS;
}

View File

@ -35,5 +35,6 @@ int event_bus_change_topic_id(event_bus_t *event_bus, size_t old_id, size_t new_
int event_bus_publish(event_bus_t *event_bus, size_t id, ...);
int event_bus_subscribe(event_bus_t *event_bus, size_t id, callback_t callback, void *data);
int event_bus_unsubscribe(event_bus_t *event_bus, size_t id, callback_t callback);
#endif // EVENT_BUS_H