2 ad017cfb 2005-02-11 devnull #pragma src "/sys/src/libndb"
3 ad017cfb 2005-02-11 devnull #pragma lib "libndb.a"
5 ad017cfb 2005-02-11 devnull AUTOLIB(ndb)
8 ad017cfb 2005-02-11 devnull * this include file requires includes of <u.h> and <bio.h>
10 ad017cfb 2005-02-11 devnull typedef struct Ndb Ndb;
11 ad017cfb 2005-02-11 devnull typedef struct Ndbtuple Ndbtuple;
12 ad017cfb 2005-02-11 devnull typedef struct Ndbhf Ndbhf;
13 ad017cfb 2005-02-11 devnull typedef struct Ndbs Ndbs;
14 ad017cfb 2005-02-11 devnull typedef struct Ndbcache Ndbcache;
17 ad017cfb 2005-02-11 devnull #pragma incomplete Ndbhf
18 ad017cfb 2005-02-11 devnull #pragma incomplete Ndbcache
23 ad017cfb 2005-02-11 devnull Ndbalen= 32, /* max attribute length */
24 cbeb0b26 2006-04-01 devnull Ndbvlen= 64 /* max value length */
28 ad017cfb 2005-02-11 devnull * the database
30 ad017cfb 2005-02-11 devnull struct Ndb
32 ad017cfb 2005-02-11 devnull Ndb *next;
34 ad017cfb 2005-02-11 devnull Biobuf b; /* buffered input file */
36 ad017cfb 2005-02-11 devnull ulong mtime; /* mtime of db file */
37 ad017cfb 2005-02-11 devnull Qid qid; /* qid of db file */
38 ad017cfb 2005-02-11 devnull char file[128];/* path name of db file */
39 ad017cfb 2005-02-11 devnull ulong length; /* length of db file */
41 ad017cfb 2005-02-11 devnull int nohash; /* don't look for hash files */
42 ad017cfb 2005-02-11 devnull Ndbhf *hf; /* open hash files */
44 ad017cfb 2005-02-11 devnull int ncache; /* size of tuple cache */
45 ad017cfb 2005-02-11 devnull Ndbcache *cache; /* cached entries */
49 ad017cfb 2005-02-11 devnull * a parsed entry, doubly linked
51 ad017cfb 2005-02-11 devnull struct Ndbtuple
53 ad017cfb 2005-02-11 devnull char attr[Ndbalen]; /* attribute name */
54 ad017cfb 2005-02-11 devnull char *val; /* value(s) */
55 ad017cfb 2005-02-11 devnull Ndbtuple *entry; /* next tuple in this entry */
56 ad017cfb 2005-02-11 devnull Ndbtuple *line; /* next tuple on this line */
57 ad017cfb 2005-02-11 devnull ulong ptr; /* (for the application - starts 0) */
58 ad017cfb 2005-02-11 devnull char valbuf[Ndbvlen]; /* initial allocation for value */
62 ad017cfb 2005-02-11 devnull * each hash file is of the form
64 ad017cfb 2005-02-11 devnull * +---------------------------------------+
65 ad017cfb 2005-02-11 devnull * | mtime of db file (4 bytes) |
66 ad017cfb 2005-02-11 devnull * +---------------------------------------+
67 ad017cfb 2005-02-11 devnull * | size of table (in entries - 4 bytes) |
68 ad017cfb 2005-02-11 devnull * +---------------------------------------+
69 ad017cfb 2005-02-11 devnull * | hash table |
70 ad017cfb 2005-02-11 devnull * +---------------------------------------+
71 ad017cfb 2005-02-11 devnull * | hash chains |
72 ad017cfb 2005-02-11 devnull * +---------------------------------------+
74 ad017cfb 2005-02-11 devnull * hash collisions are resolved using chained entries added to the
75 ad017cfb 2005-02-11 devnull * the end of the hash table.
77 ad017cfb 2005-02-11 devnull * Hash entries are of the form
79 ad017cfb 2005-02-11 devnull * +-------------------------------+
80 ad017cfb 2005-02-11 devnull * | offset (3 bytes) |
81 ad017cfb 2005-02-11 devnull * +-------------------------------+
83 ad017cfb 2005-02-11 devnull * Chain entries are of the form
85 ad017cfb 2005-02-11 devnull * +-------------------------------+
86 ad017cfb 2005-02-11 devnull * | offset1 (3 bytes) |
87 ad017cfb 2005-02-11 devnull * +-------------------------------+
88 ad017cfb 2005-02-11 devnull * | offset2 (3 bytes) |
89 ad017cfb 2005-02-11 devnull * +-------------------------------+
91 ad017cfb 2005-02-11 devnull * The top bit of an offset set to 1 indicates a pointer to a hash chain entry.
93 ad017cfb 2005-02-11 devnull #define NDBULLEN 4 /* unsigned long length in bytes */
94 ad017cfb 2005-02-11 devnull #define NDBPLEN 3 /* pointer length in bytes */
95 ad017cfb 2005-02-11 devnull #define NDBHLEN (2*NDBULLEN) /* hash file header length in bytes */
98 ad017cfb 2005-02-11 devnull * finger pointing to current point in a search
100 ad017cfb 2005-02-11 devnull struct Ndbs
102 ad017cfb 2005-02-11 devnull Ndb *db; /* data base file being searched */
103 ad017cfb 2005-02-11 devnull Ndbhf *hf; /* hash file being searched */
104 ad017cfb 2005-02-11 devnull int type;
105 ad017cfb 2005-02-11 devnull ulong ptr; /* current pointer */
106 ad017cfb 2005-02-11 devnull ulong ptr1; /* next pointer */
107 ad017cfb 2005-02-11 devnull Ndbtuple *t; /* last attribute value pair found */
111 ad017cfb 2005-02-11 devnull * bit defs for pointers in hash files
113 ad017cfb 2005-02-11 devnull #define NDBSPEC (1<<23)
114 ad017cfb 2005-02-11 devnull #define NDBCHAIN NDBSPEC /* points to a collision chain */
115 ad017cfb 2005-02-11 devnull #define NDBNAP (NDBSPEC|1) /* not a pointer */
118 ad017cfb 2005-02-11 devnull * macros for packing and unpacking pointers
120 ad017cfb 2005-02-11 devnull #define NDBPUTP(v,a) { (a)[0] = (v)&0xFF; (a)[1] = ((v)>>8)&0xFF; (a)[2] = ((v)>>16)&0xFF; }
121 ad017cfb 2005-02-11 devnull #define NDBGETP(a) ((a)[0] | ((a)[1]<<8) | ((a)[2]<<16))
124 ad017cfb 2005-02-11 devnull * macros for packing and unpacking unsigned longs
126 ad017cfb 2005-02-11 devnull #define NDBPUTUL(v,a) { (a)[0] = (v)&0xFF; (a)[1] = ((v)>>8)&0xFF; (a)[2] = ((v)>>16)&0xFF; (a)[3] = ((v)>>24)&0xFF; }
127 ad017cfb 2005-02-11 devnull #define NDBGETUL(a) ((a)[0] | ((a)[1]<<8) | ((a)[2]<<16) | ((a)[3]<<24))
129 ad017cfb 2005-02-11 devnull #define NDB_IPlen 16
131 ad017cfb 2005-02-11 devnull Ndbtuple* csgetval(char*, char*, char*, char*, char*);
132 ad017cfb 2005-02-11 devnull char* csgetvalue(char*, char*, char*, char*, Ndbtuple**);
133 ad017cfb 2005-02-11 devnull Ndbtuple* csipinfo(char*, char*, char*, char**, int);
134 ad017cfb 2005-02-11 devnull Ndbtuple* dnsquery(char*, char*, char*);
135 ad017cfb 2005-02-11 devnull char* ipattr(char*);
136 ad017cfb 2005-02-11 devnull Ndb* ndbcat(Ndb*, Ndb*);
137 ad017cfb 2005-02-11 devnull int ndbchanged(Ndb*);
138 ad017cfb 2005-02-11 devnull void ndbclose(Ndb*);
139 ad017cfb 2005-02-11 devnull Ndbtuple* ndbconcatenate(Ndbtuple*, Ndbtuple*);
140 ad017cfb 2005-02-11 devnull Ndbtuple* ndbdiscard(Ndbtuple*, Ndbtuple*);
141 ad017cfb 2005-02-11 devnull void ndbfree(Ndbtuple*);
142 ad017cfb 2005-02-11 devnull Ndbtuple* ndbgetipaddr(Ndb*, char*);
143 ad017cfb 2005-02-11 devnull Ndbtuple* ndbgetval(Ndb*, Ndbs*, char*, char*, char*, char*);
144 ad017cfb 2005-02-11 devnull char* ndbgetvalue(Ndb*, Ndbs*, char*, char*, char*, Ndbtuple**);
145 ad017cfb 2005-02-11 devnull Ndbtuple* ndbfindattr(Ndbtuple*, Ndbtuple*, char*);
146 ad017cfb 2005-02-11 devnull ulong ndbhash(char*, int);
147 ad017cfb 2005-02-11 devnull Ndbtuple* ndbipinfo(Ndb*, char*, char*, char**, int);
148 ad017cfb 2005-02-11 devnull Ndbtuple* ndblookval(Ndbtuple*, Ndbtuple*, char*, char*);
149 ad017cfb 2005-02-11 devnull Ndbtuple* ndbnew(char*, char*);
150 ad017cfb 2005-02-11 devnull Ndb* ndbopen(char*);
151 ad017cfb 2005-02-11 devnull Ndbtuple* ndbparse(Ndb*);
152 ad017cfb 2005-02-11 devnull int ndbreopen(Ndb*);
153 ad017cfb 2005-02-11 devnull Ndbtuple* ndbreorder(Ndbtuple*, Ndbtuple*);
154 ad017cfb 2005-02-11 devnull Ndbtuple* ndbsearch(Ndb*, Ndbs*, char*, char*);
155 ad017cfb 2005-02-11 devnull long ndbseek(Ndb*, long);
156 ad017cfb 2005-02-11 devnull void ndbsetval(Ndbtuple*, char*, int);
157 ad017cfb 2005-02-11 devnull Ndbtuple* ndbsnext(Ndbs*, char*, char*);
158 ad017cfb 2005-02-11 devnull Ndbtuple* ndbsubstitute(Ndbtuple*, Ndbtuple*, Ndbtuple*);