Browse Source

add subject/observer interface

master
Georg Hopp 14 years ago
parent
commit
de00ad47ad
  1. 17
      include/interface/observer.h
  2. 23
      include/interface/subject.h
  3. 3
      src/Makefile.am
  4. 15
      src/interface/observer.c
  5. 27
      src/interface/subject.c

17
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:

23
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:

3
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

15
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:

27
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:
Loading…
Cancel
Save