4 * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
5 * This file is part of DevLib - See README.devlib for information.
8 * \brief Simple notifier for the subject/observer pattern (interface)
11 * \author Bernardo Innocenti <bernie@develer.com>
13 #ifndef MWARE_OBSERVER_H
14 #define MWARE_OBSERVER_H
16 #include <mware/list.h>
20 * Here's a simple example:
25 * Observer kbd_observer;
27 * void key_pressed(int event, void *_param)
29 * char *param = (char *)_param;
31 * if (event == EVENT_KBD_PRESSED)
32 * printf("You pressed %c\n", *param);
35 * void register_kbd_listener(void)
37 * observer_SetEvent(&kbd_observer, key_pressed);
38 * observer_Subscribe(&kbd_driver, &kbd_observer);
42 typedef struct Observer
45 void (*event)(int event_id, void *param);
48 typedef struct Subject
50 /// Subscribed observers.
55 void observer_SetEvent(Observer *observer, void (*event)(int event_id, void *param));
57 #define OBSERVER_INITIALIZER(callback) { { NULL, NULL }, callback }
59 void observer_InitSubject(Subject *subject);
61 /// Aggiunge un Observer all'insieme
62 void observer_Subscribe(Subject *subject, Observer *observer);
64 /// Rimuove un Observer dall'insieme
65 void observer_Unsubscribe(Subject *subject, Observer *observer);
67 /// per tutti gli elementi nel set notifica l'evento, chiamando la relativa
69 void observer_notify(Subject *subject, int event_id, void *param);
71 #endif /* MWARE_OBSERVER_H */