--- /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 */