obj.h

changeset 60
a4033700e35c
child 62
aae5facf9fc5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/obj.h	Mon Feb 16 18:04:44 2004 +0100
@@ -0,0 +1,68 @@
+/*
+ * libtu/obj.h
+ *
+ * Copyright (c) Tuomo Valkonen 1999-2004. 
+ *
+ * You may distribute and modify this library under the terms of either
+ * the Clarified Artistic License or the GNU LGPL, version 2.1 or later.
+ */
+
+#ifndef LIBTU_OBJ_H
+#define LIBTU_OBJ_H
+
+#include "types.h"
+
+#define CLASSDESCR(TYPE) TYPE##_classdescr
+
+#define OBJ_IS(OBJ, TYPE) obj_is((Obj*)OBJ, &CLASSDESCR(TYPE))
+#define OBJ_CAST(OBJ, TYPE) (TYPE*)obj_cast((Obj*)OBJ, &CLASSDESCR(TYPE))
+
+#define INTRSTRUCT(STRU) \
+	struct STRU##_struct; typedef struct STRU##_struct STRU
+#define DECLSTRUCT(STRU)  \
+	struct STRU##_struct
+
+#define INTRCLASS(OBJ) INTRSTRUCT(OBJ); extern ClassDescr CLASSDESCR(OBJ)
+#define DECLCLASS(OBJ) DECLSTRUCT(OBJ)
+
+INTRSTRUCT(ClassDescr);
+INTRCLASS(Obj);
+INTRSTRUCT(Watch);
+
+extern bool obj_is(const Obj *obj, const ClassDescr *descr);
+extern bool obj_is_str(const Obj *obj, const char *str);
+extern const void *obj_cast(const Obj *obj, const ClassDescr *descr);
+
+extern void destroy_obj(Obj *obj);
+
+DECLCLASS(Obj){
+	ClassDescr *obj_type;
+	Watch *obj_watches;
+	int flags;
+};
+
+#define OBJ_DEST 0x0001
+#define OBJ_EXTL_CACHED 0x0002
+
+#define OBJ_IS_BEING_DESTROYED(OBJ) (((Obj*)(OBJ))->flags&OBJ_DEST)
+
+#define DYNFUN
+
+typedef void WatchHandler(Watch *watch, Obj *obj);
+
+#define WWATCH_INIT {NULL, NULL, NULL, NULL}
+
+DECLSTRUCT(Watch){
+	Obj *obj;
+	Watch *next, *prev;
+	WatchHandler *handler;
+};
+
+extern bool watch_setup(Watch *watch, Obj *obj,
+						WatchHandler *handler);
+extern void watch_reset(Watch *watch);
+extern bool watch_ok(Watch *watch);
+extern void watch_init(Watch *watch);
+extern void watch_call(Obj *obj);
+
+#endif /* LIBTU_OBJ_H */

mercurial