Added event bus unsubscribe function.
This commit is contained in:
parent
60946e130b
commit
c71af2e803
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Reference in New Issue