Annotation of src/usr.bin/make/hash.h, Revision 1.4
1.3 millert 1: /* $OpenBSD: hash.h,v 1.2 1996/06/26 05:36:31 deraadt Exp $ */
2: /* $NetBSD: hash.h,v 1.5 1996/11/06 17:59:07 christos Exp $ */
1.1 deraadt 3:
4: /*
5: * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
6: * Copyright (c) 1988, 1989 by Adam de Boor
7: * Copyright (c) 1989 by Berkeley Softworks
8: * All rights reserved.
9: *
10: * This code is derived from software contributed to Berkeley by
11: * Adam de Boor.
12: *
13: * Redistribution and use in source and binary forms, with or without
14: * modification, are permitted provided that the following conditions
15: * are met:
16: * 1. Redistributions of source code must retain the above copyright
17: * notice, this list of conditions and the following disclaimer.
18: * 2. Redistributions in binary form must reproduce the above copyright
19: * notice, this list of conditions and the following disclaimer in the
20: * documentation and/or other materials provided with the distribution.
21: * 3. All advertising materials mentioning features or use of this software
22: * must display the following acknowledgement:
23: * This product includes software developed by the University of
24: * California, Berkeley and its contributors.
25: * 4. Neither the name of the University nor the names of its contributors
26: * may be used to endorse or promote products derived from this software
27: * without specific prior written permission.
28: *
29: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
30: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
33: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
34: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
35: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
38: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39: * SUCH DAMAGE.
40: *
1.3 millert 41: * from: @(#)hash.h 8.1 (Berkeley) 6/6/93
1.1 deraadt 42: */
43:
44: /* hash.h --
45: *
46: * This file contains definitions used by the hash module,
47: * which maintains hash tables.
48: */
49:
50: #ifndef _HASH
51: #define _HASH
52:
1.3 millert 53: /*
1.1 deraadt 54: * The following defines one entry in the hash table.
55: */
56:
57: typedef struct Hash_Entry {
58: struct Hash_Entry *next; /* Used to link together all the
59: * entries associated with the same
60: * bucket. */
61: ClientData clientData; /* Arbitrary piece of data associated
62: * with key. */
63: unsigned namehash; /* hash value of key */
64: char name[1]; /* key string */
65: } Hash_Entry;
66:
67: typedef struct Hash_Table {
68: struct Hash_Entry **bucketPtr;/* Pointers to Hash_Entry, one
69: * for each bucket in the table. */
70: int size; /* Actual size of array. */
71: int numEntries; /* Number of entries in the table. */
72: int mask; /* Used to select bits for hashing. */
73: } Hash_Table;
74:
1.3 millert 75: /*
1.1 deraadt 76: * The following structure is used by the searching routines
77: * to record where we are in the search.
78: */
79:
80: typedef struct Hash_Search {
81: Hash_Table *tablePtr; /* Table being searched. */
82: int nextIndex; /* Next bucket to check (after current). */
83: Hash_Entry *hashEntryPtr; /* Next entry to check in current bucket. */
84: } Hash_Search;
85:
86: /*
87: * Macros.
88: */
89:
90: /*
1.3 millert 91: * ClientData Hash_GetValue(h)
92: * Hash_Entry *h;
1.1 deraadt 93: */
94:
95: #define Hash_GetValue(h) ((h)->clientData)
96:
1.3 millert 97: /*
98: * Hash_SetValue(h, val);
99: * Hash_Entry *h;
100: * char *val;
1.1 deraadt 101: */
102:
103: #define Hash_SetValue(h, val) ((h)->clientData = (ClientData) (val))
104:
1.3 millert 105: /*
106: * Hash_Size(n) returns the number of words in an object of n bytes
1.1 deraadt 107: */
108:
109: #define Hash_Size(n) (((n) + sizeof (int) - 1) / sizeof (int))
110:
111: void Hash_InitTable __P((Hash_Table *, int));
112: void Hash_DeleteTable __P((Hash_Table *));
113: Hash_Entry *Hash_FindEntry __P((Hash_Table *, char *));
114: Hash_Entry *Hash_CreateEntry __P((Hash_Table *, char *, Boolean *));
115: void Hash_DeleteEntry __P((Hash_Table *, Hash_Entry *));
116: Hash_Entry *Hash_EnumFirst __P((Hash_Table *, Hash_Search *));
117: Hash_Entry *Hash_EnumNext __P((Hash_Search *));
118:
119: #endif /* _HASH */