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