1 /* $Id$ $Revision$ */ 2 /* vim:set shiftwidth=4 ts=8: */ 3 4 /************************************************************************* 5 * Copyright (c) 2011 AT&T Intellectual Property 6 * All rights reserved. This program and the accompanying materials 7 * are made available under the terms of the Eclipse Public License v1.0 8 * which accompanies this distribution, and is available at 9 * http://www.eclipse.org/legal/epl-v10.html 10 * 11 * Contributors: See CVS logs. Details at http://www.graphviz.org/ 12 *************************************************************************/ 13 14 #ifdef __cplusplus 15 extern "C" { 16 #endif 17 18 /* Lefteris Koutsofios - AT&T Labs Research */ 19 20 #ifndef _TBL_H 21 #define _TBL_H 22 #ifdef _WIN32 23 #include "mem.h" 24 #endif 25 26 27 28 #define T_INTEGER 1 29 #define T_REAL 2 30 #define T_STRING 3 31 #define T_CODE 4 32 #define T_TABLE 5 33 #define T_SIZE 6 34 35 typedef struct Tinteger_t { 36 Mheader_t head; 37 long i; 38 } Tinteger_t; 39 #define T_INTEGERSIZE sizeof (Tinteger_t) 40 typedef struct Treal_t { 41 Mheader_t head; 42 double d; 43 } Treal_t; 44 #define T_REALSIZE sizeof (Treal_t) 45 typedef struct Tstring_t { 46 Mheader_t head; 47 char s[1]; 48 } Tstring_t; 49 #define T_STRINGSIZE(l) (l + Tstringoffset) 50 typedef struct Tcode_t { 51 Mheader_t head; 52 Code_t c[1]; 53 } Tcode_t; 54 #define T_CODESIZE(l) (l * C_CODESIZE + Tcodeoffset) 55 typedef struct Tkv_t { 56 void *ko; 57 void *vo; 58 } Tkv_t; 59 #define T_KVSIZE sizeof (Tkv_t) 60 typedef struct Tkvlist_t { 61 long i, n; 62 Tkv_t kv[1]; 63 } Tkvlist_t; 64 #define T_KVLISTSIZE(l) (l * T_KVSIZE + Tkvoffset) 65 #define T_KVLISTPTRSIZE sizeof (Tkvlist_t *) 66 typedef struct Ttable_t { 67 Mheader_t head; 68 long n, ln; 69 long time; 70 Tkvlist_t **lp; 71 } Ttable_t; 72 #define T_TABLESIZE sizeof (Ttable_t) 73 typedef struct Tkvindex_t { 74 Ttable_t *tp; 75 Tkv_t *kvp; 76 long i, j; 77 } Tkvindex_t; 78 79 typedef void *Tobj; 80 81 typedef struct Tonm_t { /* Object aNd Mark */ 82 Tobj o; 83 long m; 84 } Tonm_t; 85 86 #define T_ISSTRING(o) (M_TYPEOF (o) == T_STRING) 87 #define T_ISTABLE(o) (M_TYPEOF (o) == T_TABLE) 88 #define T_ISINTEGER(o) (M_TYPEOF (o) == T_INTEGER) 89 #define T_ISREAL(o) (M_TYPEOF (o) == T_REAL) 90 #define T_ISNUMBER(o) (M_TYPEOF (o) == T_REAL || M_TYPEOF (o) == T_INTEGER) 91 92 #define Tgettype(p) (((Mheader_t *) p)->type) 93 #define Tgettablen(p) (((Ttable_t *) p)->n) 94 #define Tgettime(p) (((Ttable_t *) p)->time) 95 #define Tgetstring(p) (char *) &(((Tstring_t *) p)->s[0]) 96 #define Tgetcode(p) (Code_t *) &(((Tcode_t *) p)->c[0]) 97 #define Tgetinteger(p) (((Tinteger_t *) p)->i) 98 #define Tgetreal(p) (((Treal_t *) p)->d) 99 #define Tgetnumber(p) (T_ISINTEGER (p) ? Tgetinteger (p) : Tgetreal (p)) 100 101 #define TCgettype(p, off) ((Tgetcode (p) + off)->ctype) 102 #define TCgetfp(p, off) ((Tgetcode (p) + off)->u.fp) 103 #define TCgetinteger(p, off) ((Tgetcode (p) + off)->u.i) 104 #define TCgetobject(p, off) ((Tgetcode (p) + off)->u.o) 105 #define TCgetreal(p, off) ((Tgetcode (p) + off)->u.d) 106 #define TCgetstring(p, off) ((char *) &((Tgetcode (p) + off)->u.s)) 107 #define TCgetnext(p, off) ((Tgetcode (p) + off)->next) 108 #define TCgetaddr(p, off) (Tgetcode (p) + off) 109 110 extern long Ttime; 111 extern int Tstringoffset, Tcodeoffset, Tkvoffset; 112 extern Tobj Ttrue, Tfalse; 113 114 void Tinit (void); 115 void Tterm (void); 116 void Tgchelper (void *); 117 void Tfreehelper (void *); 118 Tobj Tinteger (long); 119 Tobj Treal (double); 120 Tobj Tstring (char *); 121 Tobj Tcode (Code_t *, int, int); 122 Tobj Ttable (long); 123 void Tinsi (Tobj, long, Tobj); 124 void Tinsr (Tobj, double, Tobj); 125 void Tinss (Tobj, char *, Tobj); 126 void Tinso (Tobj, Tobj, Tobj); 127 Tobj Tfindi (Tobj, long); 128 Tobj Tfindr (Tobj, double); 129 Tobj Tfinds (Tobj, char *); 130 Tobj Tfindo (Tobj, Tobj); 131 void Tdeli (Tobj, long); 132 void Tdelr (Tobj, double); 133 void Tdels (Tobj, char *); 134 void Tdelo (Tobj, Tobj); 135 Tobj Tcopy (Tobj); 136 void Tgetfirst (Tobj, Tkvindex_t *); 137 void Tgetnext (Tkvindex_t *); 138 #endif /* _TBL_H */ 139 140 #ifdef __cplusplus 141 } 142 #endif 143