/*
// Full copyright information is available in the file ../doc/CREDITS
*/
#ifndef cdc_types_h
#define cdc_types_h
/*
// C typedef of any Cold advanced data type begins with a 'c'
*/
typedef Float cFloat;
typedef Long cNum;
typedef struct cStr cStr;
typedef struct cList cList;
typedef struct cBuf cBuf;
typedef struct cFrob cFrob;
typedef struct cData cData;
typedef struct cDict cDict;
typedef Long Ident;
typedef Long cObjnum;
typedef struct Obj Obj;
typedef struct Method Method;
typedef struct ident_entry Ident_entry;
typedef struct string_entry String_entry;
typedef struct var Var;
typedef struct error_list Error_list;
typedef Int Object_string;
typedef Int Object_ident;
#include "regexp.h"
struct cStr {
Int start;
Int len;
Int size;
Int refs;
regexp * reg;
Char s[1];
};
struct cBuf {
Int len;
Int refs;
uChar s[1];
};
struct cData {
Int type;
union {
cNum val;
cFloat fval;
cObjnum objnum;
Ident symbol;
Ident error;
cStr * str;
cList * list;
cFrob * frob;
cDict * dict;
cBuf * buffer;
void * instance;
} u;
};
struct cList {
Int start;
Int len;
Int size;
Int refs;
cData el[1];
};
struct cDict {
cList * keys;
cList * values;
Int * links;
Int * hashtab;
Int hashtab_size;
Int refs;
};
struct cFrob {
Long cclass;
cData rep;
};
typedef void (*ciDbData)(cData*, FILE*);
typedef int (*ciSzData)(cData*);
typedef int (*ciCmpData)(cData*, cData*);
typedef void (*ciDupData)(cData*, cData*);
typedef void (*ciDisData)(cData*);
typedef cStr *(*ciStrData)(cStr*, cData*, Bool);
typedef struct cInstance {
char *name;
Ident id_name;
ciDbData pack;
ciDbData unpack;
ciSzData size;
ciCmpData compare;
ciSzData hash;
ciDupData dup;
ciDisData discard;
ciStrData addstr;
} cInstance;
/* io.h shouldn't necessarily be here, but it has to be here before other
data types, but after the above data definitions */
#include "io.h"
#include "ident.h"
#include "object.h"
#include "list.h"
#include "cdc_string.h"
#include "buffer.h"
#include "dict.h"
#include "data.h"
#endif