From 4043e7ad07eaec4bbd3689ee5b7f1ad7ee63861d Mon Sep 17 00:00:00 2001 From: Dave Beazley Date: Thu, 15 Jun 2000 02:18:42 +0000 Subject: [PATCH] *** empty log message *** git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@461 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Source/DOH/Include/dohobj.h | 132 ++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 Source/DOH/Include/dohobj.h diff --git a/Source/DOH/Include/dohobj.h b/Source/DOH/Include/dohobj.h new file mode 100644 index 000000000..566d04652 --- /dev/null +++ b/Source/DOH/Include/dohobj.h @@ -0,0 +1,132 @@ +/* ----------------------------------------------------------------------------- + * dohobj.h + * + * This file describes internally managed objects. + * + * Author(s) : David Beazley (beazley@cs.uchicago.edu) + * + * Copyright (C) 1999-2000. The University of Chicago + * See the file LICENSE for information on usage and redistribution. + * + * $Header$ + * ----------------------------------------------------------------------------- */ + +#ifndef _DOHOBJ_H +#define _DOHOBJ_H + +#include "doh.h" + +/* Hash objects */ +typedef struct { + DOH *(*doh_getattr)(DOH *obj, DOH *name); /* Get attribute */ + int (*doh_setattr)(DOH *obj, DOH *name, DOH *value); /* Set attribute */ + int (*doh_delattr)(DOH *obj, DOH *name); /* Del attribute */ + DOH *(*doh_firstkey)(DOH *obj); /* First key */ + DOH *(*doh_nextkey)(DOH *obj); /* Next key */ +} DohHashMethods; + +/* List objects */ +typedef struct { + DOH *(*doh_getitem)(DOH *obj, int index); /* Get item */ + int (*doh_setitem)(DOH *obj, int index, DOH *value); /* Set item */ + int (*doh_delitem)(DOH *obj, int index); /* Delete item */ + int (*doh_insitem)(DOH *obj, int index, DOH *value); /* Insert item */ + DOH *(*doh_firstitem)(DOH *obj); /* Iterators */ + DOH *(*doh_nextitem)(DOH *obj); + void (*doh_sort)(DOH *obj, int opt); /* Sort */ +} DohListMethods; + +/* File methods */ +typedef struct { + int (*doh_read)(DOH *obj, void *buffer, int nbytes); /* Read bytes */ + int (*doh_write)(DOH *obj, void *buffer, int nbytes); /* Write bytes */ + int (*doh_putc)(DOH *obj, int ch); /* Put character */ + int (*doh_getc)(DOH *obj); /* Get character */ + int (*doh_ungetc)(DOH *obj, int ch); /* Unget character */ + int (*doh_seek)(DOH *obj, long offset, int whence); /* Seek */ + long (*doh_tell)(DOH *obj); /* Tell */ + int (*doh_close)(DOH *obj); /* Close */ +} DohFileMethods; + +/* String methods */ +typedef struct { + int (*doh_replace)(DOH *obj, DOH *old, DOH *rep, int flags); + void (*doh_chop)(DOH *obj); +} DohStringMethods; + +/* ----------------------------------------------------------------------------- + * DohObjInfo + * ----------------------------------------------------------------------------- */ + +typedef struct DohObjInfo { + char *objname; /* Object name */ + + /* Basic object methods */ + void (*doh_del)(DOH *obj); /* Delete object */ + DOH *(*doh_copy)(DOH *obj); /* Copy and object */ + void (*doh_clear)(DOH *obj); /* Clear an object */ + + /* I/O methods */ + DOH *(*doh_str)(DOH *obj); /* Make a full string */ + void *(*doh_data)(DOH *obj); /* Return raw data */ + int (*doh_dump)(DOH *obj, DOH *out); /* Serialize on out */ + + /* Length and hash values */ + int (*doh_len)(DOH *obj); + int (*doh_hashval)(DOH *obj); + + /* Compare */ + int (*doh_cmp)(DOH *obj1, DOH *obj2); + + /* Positional */ + void (*doh_setfile)(DOH *obj, DOHString_or_char *file); + DOH *(*doh_getfile)(DOH *obj); + void (*doh_setline)(DOH *obj, int line); + int (*doh_getline)(DOH *obj); + + DohHashMethods *doh_hash; /* Hash methods */ + DohListMethods *doh_list; /* List methods */ + DohFileMethods *doh_file; /* File methods */ + DohStringMethods *doh_string; /* String methods */ + void *doh_reserved; /* Reserved */ + void *clientdata; /* User data */ +} DohObjInfo; + +typedef struct { + void *data; /* Data pointer */ + int type : 4; /* Object type (max 16 -- deal with it) */ + int flag_intern : 1; /* Interned object */ + int flag_marked : 1; /* Mark flag */ + int flag_user : 1; /* User flag */ + int flag_reserved : 1; /* Reserved flag */ + int refcount : 24; /* Reference count (max 16 million) */ +} DohBase; + +/* Macros for decrefing and increfing (safe for null objects). */ +#define Decref(a) if (a) ((DohBase *) a)->refcount-- +#define Incref(a) if (a) ((DohBase *) a)->refcount++ +#define Refcount(a) ((DohBase *) a)->refcount + +/* Macros for manipulating objects in a safe manner */ +#define ObjData(a) ((DohBase *)a)->data +#define ObjSetMark(a,x) ((DohBase *)a)->flag_marked = x +#define ObjGetMark(a) ((DohBase *)a)->flag_marked +#define ObjType(a) ((DohBase *)a)->type + +extern DOH *DohObjMalloc(int type, void *data); /* Allocate a DOH object */ +extern void DohObjFree(DOH *ptr); /* Free a DOH object */ +extern void DohRegisterType(int type, DohObjInfo *objinfo); + +#define MAX_DOHTYPE 16 + +#define DOHTYPE_STRING 1 +#define DOHTYPE_LIST 2 +#define DOHTYPE_HASH 3 +#define DOHTYPE_VOID 4 +#define DOHTYPE_FILE 5 + +#endif /* DOHOBJ_H */ + + + +