1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#ifndef _STRHASH_H_INCLUDE
#define _STRHASH_H_INCLUDE
/* $FreeBSD$ */
/*
*
* Copyright 1990
* Terry Jones & Jordan Hubbard
*
* PCS Computer Systeme, GmbH.
* Munich, West Germany
*
*
* All rights reserved.
*
* This is unsupported software and is subject to change without notice.
* the author makes no representations about the suitability of this software
* for any purpose. It is supplied "as is" without express or implied
* warranty.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of the author not be used in
* advertising or publicity pertaining to distribution of the software
* without specific, written prior permission.
*
*/
/*
* This is the definition file for hash.c. The plunderer from down-under
* did the code, I just helped define the spec. That's why his name gets
* to go first.
*/
#define HASH_SZ 97
typedef struct _node {
char *key;
void *data;
struct _node *next;
} hash_node;
typedef struct {
int size;
hash_node **buckets;
} hash_table;
hash_table *hash_create(int size);
void hash_destroy(hash_table *table, char *key,
void (*nukefunc)(char *k, void *d));
void *hash_search(hash_table *table, char *key, void *datum,
void (*replace_func)(void *d));
void hash_traverse(hash_table *table,
int (*func)(char *k, void *d, void *arg), void *arg);
void hash_purge(hash_table *table, void (*purge_func)(char *k, void *d));
#ifdef HASH_STATS
extern void hash_stats();
#endif
#endif /* _STRHASH_H_INCLUDE */
|