52 #define SUBSCRIBE_ATSTART (1u<<0) 54 #define DECLARE_PUBSUB_STRUCT_TYPES(name) \ 56 typedef struct name ## _event_data_t name ## _event_data_t; \ 58 typedef struct name ## _subscriber_data_t name ## _subscriber_data_t; 60 #define DECLARE_PUBSUB_TOPIC(name) \ 62 typedef struct name ## _subscriber_t name ## _subscriber_t; \ 64 typedef int (*name ## _subscriber_fn_t)( \ 65 name ## _event_data_t *data, \ 66 name ## _subscriber_data_t *extra); \ 68 const name ## _subscriber_t *name ## _subscribe( \ 69 name##_subscriber_fn_t subscriber, \ 70 name##_subscriber_data_t *extra_data, \ 74 int name ## _unsubscribe(const name##_subscriber_t *s); 76 #define DECLARE_NOTIFY_PUBSUB_TOPIC(linkage, name) \ 78 linkage int name ## _notify(name ## _event_data_t *data, unsigned flags); \ 80 linkage void name ## _clear(void); 125 unsigned subscribe_flags,
132 void *notify_data,
unsigned notify_flags);
134 #define IMPLEMENT_PUBSUB_TOPIC(notify_linkage, name) \ 135 static pubsub_topic_t name ## _topic_ = { NULL, 0, 0 }; \ 136 const name ## _subscriber_t * \ 137 name ## _subscribe(name##_subscriber_fn_t subscriber, \ 138 name##_subscriber_data_t *extra_data, \ 142 const pubsub_subscriber_t *s; \ 143 s = pubsub_subscribe_(&name##_topic_, \ 144 (pubsub_subscriber_fn_t)subscriber, \ 148 return (const name##_subscriber_t *)s; \ 151 name ## _unsubscribe(const name##_subscriber_t *subscriber) \ 153 return pubsub_unsubscribe_(&name##_topic_, \ 154 (const pubsub_subscriber_t *)subscriber); \ 157 name##_call_the_notify_fn_(pubsub_subscriber_t *subscriber, \ 160 name ## _subscriber_fn_t fn; \ 161 fn = (name ## _subscriber_fn_t) subscriber->fn; \ 162 return fn(notify_data, subscriber->subscriber_data); \ 165 name ## _notify(name ## _event_data_t *event_data, unsigned flags) \ 167 return pubsub_notify_(&name##_topic_, \ 168 name##_call_the_notify_fn_, \ 172 notify_linkage void \ 173 name ## _clear(void) \ 175 pubsub_clear_(&name##_topic_); \ int pubsub_notify_(pubsub_topic_t *topic, pubsub_notify_fn_t notify_fn, void *notify_data, unsigned notify_flags)
Definition: pubsub.c:91
unsigned locked
Definition: pubsub.h:119
unsigned subscriber_flags
Definition: pubsub.h:104
const pubsub_subscriber_t * pubsub_subscribe_(pubsub_topic_t *topic, pubsub_subscriber_fn_t fn, void *subscriber_data, unsigned subscribe_flags, unsigned priority)
Definition: pubsub.c:41
Definition: container.h:18
Header file to define uint32_t and friends.
struct pubsub_topic_t pubsub_topic_t
int pubsub_unsubscribe_(pubsub_topic_t *topic, const pubsub_subscriber_t *sub)
Definition: pubsub.c:68
struct pubsub_subscriber_t pubsub_subscriber_t
unsigned priority
Definition: pubsub.h:102
void * subscriber_data
Definition: pubsub.h:100
void pubsub_clear_(pubsub_topic_t *topic)
Definition: pubsub.c:115
struct smartlist_t * subscribers
Definition: pubsub.h:113
int(* pubsub_subscriber_fn_t)(void *, void *)
Definition: pubsub.h:90
pubsub_subscriber_fn_t fn
Definition: pubsub.h:98
uint64_t n_events_fired
Definition: pubsub.h:116