hash.h revision 225736
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 hashnode 31{ 32 Ntype type; 33 struct hashnode *next; 34 struct hashnode *prev; 35 struct hashnode *hashnext; 36 struct hashnode *hashprev; 37 char *key; 38 void *data; 39 void (*delproc) (); 40}; 41typedef struct hashnode Node; 42 43struct hashlist 44{ 45 Node *list; 46 Node *hasharray[HASHSIZE]; 47 struct hashlist *next; 48}; 49typedef struct hashlist List; 50 51List *getlist PROTO((void)); 52Node *findnode PROTO((List * list, const char *key)); 53Node *findnode_fn PROTO((List * list, const char *key)); 54Node *getnode PROTO((void)); 55int insert_before PROTO((List * list, Node * marker, Node * p)); 56int addnode PROTO((List * list, Node * p)); 57int addnode_at_front PROTO((List * list, Node * p)); 58int walklist PROTO((List * list, int (*)(Node *n, void *closure), void *closure)); 59int list_isempty PROTO ((List *list)); 60void dellist PROTO((List ** listp)); 61void delnode PROTO((Node * p)); 62void freenode PROTO((Node * p)); 63void sortlist PROTO((List * list, int (*)(const Node *, const Node *))); 64int fsortcmp PROTO((const Node * p, const Node * q)); 65