xref: /openbsd/gnu/usr.bin/cvs/src/hash.h (revision e77048c1)
1 /*
2  * Copyright (c) 1992, Brian Berliner and Jeff Polk
3  *
4  * You may distribute under the terms of the GNU General Public License as
5  * specified in the README file that comes with the CVS source distribution.
6  */
7 
8 /*
9  * The number of buckets for the hash table contained in each list.  This
10  * should probably be prime.
11  */
12 #define HASHSIZE	151
13 
14 /*
15  * Types of nodes
16  */
17 enum ntype
18 {
19     NT_UNKNOWN, HEADER, ENTRIES, FILES, LIST, RCSNODE,
20     RCSVERS, DIRS, UPDATE, LOCK, NDBMNODE, FILEATTR,
21     VARIABLE, RCSFIELD, RCSCMPFLD
22 };
23 typedef enum ntype Ntype;
24 
25 struct node
26 {
27     Ntype type;
28     struct node *next;
29     struct node *prev;
30     struct node *hashnext;
31     struct node *hashprev;
32     char *key;
33     char *data;
34     void (*delproc) ();
35 };
36 typedef struct node Node;
37 
38 struct list
39 {
40     Node *list;
41     Node *hasharray[HASHSIZE];
42     struct list *next;
43 };
44 typedef struct list List;
45 
46 List *getlist PROTO((void));
47 Node *findnode PROTO((List * list, const char *key));
48 Node *findnode_fn PROTO((List * list, const char *key));
49 Node *getnode PROTO((void));
50 int insert_before PROTO((List * list, Node * marker, Node * p));
51 int addnode PROTO((List * list, Node * p));
52 int addnode_at_front PROTO((List * list, Node * p));
53 int walklist PROTO((List * list, int (*)(Node *n, void *closure), void *closure));
54 int list_isempty PROTO ((List *list));
55 void dellist PROTO((List ** listp));
56 void delnode PROTO((Node * p));
57 void freenode PROTO((Node * p));
58 void sortlist PROTO((List * list, int (*)(const Node *, const Node *)));
59 int fsortcmp PROTO((const Node * p, const Node * q));
60