/* This software may only be used by you under license from AT&T Corp. ("AT&T"). A copy of AT&T's Source Code Agreement is available at AT&T's Internet website having the URL: If you received this software without first entering into a license with AT&T, you have an infringing copy of this software and cannot use it without violating AT&T's intellectual property rights. */ #ifndef _DTHDR_H #define _DTHDR_H 1 #ifndef _BLD_cdt #define _BLD_cdt 1 #endif /* Internal definitions for libcdt. ** Written by Kiem-Phong Vo (5/25/96) */ #if _PACKAGE_ast #include #endif #include /* short-hand notations */ #define NIL(t) ((t)0) #define reg register #define uint unsigned int #define left hl._left #define hash hl._hash #define htab hh._htab #define head hh._head /* this must be disjoint from DT_METHODS */ #define DT_FLATTEN 010000 /* dictionary already flattened */ #define DT_WALK 020000 /* hash table being walked */ /* hash start size and load factor */ #define HSLOT (32) #define HRESIZE(n) ((n) << 1) #define HLOAD(s) ((s) << 1) #define HINDEX(n,h) ((h)&((n)-1)) #define UNFLATTEN(dt) \ ((dt->data->type&DT_FLATTEN) ? dtrestore(dt,NIL(Dtlink_t*)) : 0) /* the pointer to the actual object */ #define INITDISC(dt,d,ky,sz,lk,cmpf) \ (d = dt->disc, ky = d->key, sz = d->size, lk = d->link, cmpf = d->comparf) #define ELT(o,lk) ((Dtlink_t*)((char*)(o) + lk) ) #define OBJ(e,lk) (lk < 0 ? ((Dthold_t*)(e))->obj : (Void_t*)((char*)(e) - lk) ) #define KEY(o,ky,sz) ((Void_t*)(sz < 0 ? *((char**)((char*)(o) + ky)) : \ ((char*)(o) + ky) ) ) /* compare and hash functions */ #define CMP(dt,k1,k2,d,cmpf,sz) \ (cmpf ? (*cmpf)(dt,k1,k2,d) : \ sz <= 0 ? strcmp(k1,k2) : memcmp(k1,k2,sz) ) #define HASH(dt,k,d,sz) (d->hashf ? (*d->hashf)(dt,k,d) : dtstrhash(0,k,sz) ) /* tree rotation functions */ #define RROTATE(x,y) ((x)->left = (y)->right, (y)->right = (x), (x) = (y)) #define LROTATE(x,y) ((x)->right = (y)->left, (y)->left = (x), (x) = (y)) #define RLINK(r,x) ((r) = (r)->left = (x) ) #define LLINK(l,x) ((l) = (l)->right = (x) ) #if !_PACKAGE_ast _BEGIN_EXTERNS_ extern Void_t* malloc _ARG_((size_t)); extern Void_t* realloc _ARG_((Void_t*, size_t)); extern void free _ARG_((Void_t*)); extern int memcmp _ARG_((const Void_t*, const Void_t*, size_t)); extern int strcmp _ARG_((const char*, const char*)); _END_EXTERNS_ #endif #endif /* _DTHDR_H */