From de00ad47ad4cf93c472394c8fb309ddee8638a49 Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Wed, 15 Feb 2012 06:19:52 +0100 Subject: [PATCH] add subject/observer interface --- include/interface/observer.h | 17 +++++++++++++++++ include/interface/subject.h | 23 +++++++++++++++++++++++ src/Makefile.am | 3 ++- src/interface/observer.c | 15 +++++++++++++++ src/interface/subject.c | 27 +++++++++++++++++++++++++++ 5 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 include/interface/observer.h create mode 100644 include/interface/subject.h create mode 100644 src/interface/observer.c create mode 100644 src/interface/subject.c diff --git a/include/interface/observer.h b/include/interface/observer.h new file mode 100644 index 0000000..edd5ea6 --- /dev/null +++ b/include/interface/observer.h @@ -0,0 +1,17 @@ +#ifndef __OBSERVER_H__ +#define __OBSERVER_H__ + +typedef void (* fptr_observerNotify)(void *, void*); + +extern const struct interface i_Observer; + +struct i_Observer { + const struct interface * const _; + fptr_observerNotify notify; +}; + +extern void observerNotify(void *, void *); + +#endif // __OBSERVER_H__ + +// vim: set ts=4 sw=4: diff --git a/include/interface/subject.h b/include/interface/subject.h new file mode 100644 index 0000000..f3d4853 --- /dev/null +++ b/include/interface/subject.h @@ -0,0 +1,23 @@ +#ifndef __SUBJECT_H__ +#define __SUBJECT_H__ + +typedef void (* fptr_subjectAttach)(void *, void *); +typedef void (* fptr_subjectDetach)(void *, void *); +typedef void (* fptr_subjectNotify)(void *); + +extern const struct interface i_Subject; + +struct i_Subject { + const struct interface * const _; + fptr_subjectAttach attach; + fptr_subjectDetach detach; + fptr_subjectNotify notify; +}; + +extern void subjectAttach(void *, void *); +extern void subjectDetach(void *, void *); +extern void subjectNotify(void *); + +#endif // __SUBJECT_H__ + +// vim: set ts=4 sw=4: diff --git a/src/Makefile.am b/src/Makefile.am index 8327aeb..4e6c690 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,7 +2,8 @@ ACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = subdir-objects IFACE = interface/class.c interface/stream_reader.c interface/logger.c \ - interface/stream_writer.c interface/http_intro.c + interface/stream_writer.c interface/http_intro.c \ + interface/subject.c interface/observer.c CLASS = class.c interface.c SOCKET = socket.c socket/accept.c socket/connect.c socket/listen.c SERVER = server.c server/run.c server/close_conn.c diff --git a/src/interface/observer.c b/src/interface/observer.c new file mode 100644 index 0000000..653fe1e --- /dev/null +++ b/src/interface/observer.c @@ -0,0 +1,15 @@ +#include "class.h" +#include "interface/observer.h" + +const struct interface i_Observer = { + "observer", + 1 +}; + +void +observerNotify(void * observer, void * subject) +{ + CALL(observer, Observer, notify, subject); +} + +// vim: set ts=4 sw=4: diff --git a/src/interface/subject.c b/src/interface/subject.c new file mode 100644 index 0000000..f0979f6 --- /dev/null +++ b/src/interface/subject.c @@ -0,0 +1,27 @@ +#include "class.h" +#include "interface/subject.h" + +const struct interface i_Subject = { + "subject", + 3 +}; + +void +subjectAttach(void * subject, void * observer) +{ + CALL(subject, Subject, attach, observer); +} + +void +subjectDetach(void * subject, void * observer) +{ + CALL(subject, Subject, detach, observer); +} + +void +subjectNotify(void * subject) +{ + CALL(subject, Subject, notify); +} + +// vim: set ts=4 sw=4: