X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=mware%2Fobserver.c;h=a3acf98c11144b51c03534a6399417a07d288ffe;hb=HEAD;hp=7a2e38d1dae4ce539cd76ffb6050a533129b1ede;hpb=9ba9dcf2a59a952609e19154e11de3e2478cbf42;p=bertos.git diff --git a/mware/observer.c b/mware/observer.c deleted file mode 100644 index 7a2e38d1..00000000 --- a/mware/observer.c +++ /dev/null @@ -1,81 +0,0 @@ -/** - * \file - * - * - * \brief Simple notifier for the observer/subject pattern (implementation) - * - * \version $Id$ - * \author Bernardo Innocenti - */ - -#include "observer.h" -#include // IRQ_DISABLE/IRQ_ENABLE - - -void observer_SetEvent(Observer *observer, void (*event)(int event_id, void *param)) -{ - observer->event = event; -} - -void observer_InitSubject(Subject *subject) -{ - LIST_INIT(&subject->observers); -} - -void observer_Subscribe(Subject *subject, Observer *observer) -{ - ATOMIC(ADDHEAD(&subject->observers, &observer->link)); -} - -void observer_Unsubscribe(UNUSED_ARG(Subject *,subject), Observer *observer) -{ - ATOMIC(REMOVE(&observer->link)); -} - -void observer_notify(Subject *subject, int event_id, void *param) -{ - Observer *observer; - cpuflags_t irqstate; - IRQ_SAVE_DISABLE(irqstate); - - /* - * Run over list with protection against other - * threads, but re-enable irqs in callbacks. - */ - FOREACH_NODE(observer, &subject->observers) - { - IRQ_RESTORE(irqstate); - observer->event(event_id, param); - IRQ_SAVE_DISABLE(irqstate); - } - - IRQ_RESTORE(irqstate); -}