1#ifndef _DTHDR_H
2#define _DTHDR_H 1
3
4/* Internal definitions for libcdt.
5** Written by Kiem-Phong Vo (5/25/96)
6*/
7
8#include <stdlib.h>
9
10#include <cdt.h>
11
12/* short-hand notations */
13#define NIL(t) ((t)0)
14#define reg register
15#define uint unsigned int
16#define left hl._left
17#define hash hl._hash
18#define htab hh._htab
19#define head hh._head
20
21/* this must be disjoint from DT_METHODS */
22#define DT_FLATTEN 010000 /* dictionary already flattened */
23#define DT_WALK 020000 /* hash table being walked */
24
25/* how the Dt_t handle was allocated */
26#define DT_MALLOC 0
27#define DT_MEMORYF 1
28
29/* max search length before splaying */
30#define DT_MINP (sizeof(size_t)*8 - 2)
31
32/* hash start size and load factor */
33#define HSLOT (256)
34#define HRESIZE(n) ((n) << 1)
35#define HLOAD(s) ((s) << 1)
36#define HINDEX(n,h) ((h)&((n)-1))
37
38#define UNFLATTEN(dt) \
39 ((dt->data->type&DT_FLATTEN) ? dtrestore(dt,NIL(Dtlink_t*)) : 0)
40
41/* tree rotation/linking functions */
42#define rrotate(x,y) ((x)->left = (y)->right, (y)->right = (x))
43#define lrotate(x,y) ((x)->right = (y)->left, (y)->left = (x))
44#define rlink(r,x) ((r) = (r)->left = (x) )
45#define llink(l,x) ((l) = (l)->right = (x) )
46
47#define RROTATE(x,y) (rrotate(x,y), (x) = (y))
48#define LROTATE(x,y) (lrotate(x,y), (x) = (y))
49
50#endif /* _DTHDR_H */
51