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