1: /* Hash routine.
2: Copyright (C) 1998 Kunihiro Ishiguro
3:
4: This file is part of GNU Zebra.
5:
6: GNU Zebra is free software; you can redistribute it and/or modify
7: it under the terms of the GNU General Public License as published
8: by the Free Software Foundation; either version 2, or (at your
9: option) any later version.
10:
11: GNU Zebra is distributed in the hope that it will be useful, but
12: WITHOUT ANY WARRANTY; without even the implied warranty of
13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: General Public License for more details.
15:
16: You should have received a copy of the GNU General Public License
17: along with GNU Zebra; see the file COPYING. If not, write to the
18: Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19: Boston, MA 02111-1307, USA. */
20:
21: #ifndef _ZEBRA_HASH_H
22: #define _ZEBRA_HASH_H
23:
24: /* Default hash table size. */
25: #define HASH_INITIAL_SIZE 256 /* initial number of backets. */
26: #define HASH_THRESHOLD 10 /* expand when backet. */
27:
28: struct hash_backet
29: {
30: /* Linked list. */
31: struct hash_backet *next;
32:
33: /* Hash key. */
34: unsigned int key;
35:
36: /* Data. */
37: void *data;
38: };
39:
40: struct hash
41: {
42: /* Hash backet. */
43: struct hash_backet **index;
44:
45: /* Hash table size. Must be power of 2 */
46: unsigned int size;
47:
48: /* If expansion failed. */
49: int no_expand;
50:
51: /* Key make function. */
52: unsigned int (*hash_key) (void *);
53:
54: /* Data compare function. */
55: int (*hash_cmp) (const void *, const void *);
56:
57: /* Backet alloc. */
58: unsigned long count;
59: };
60:
61: extern struct hash *hash_create (unsigned int (*) (void *),
62: int (*) (const void *, const void *));
63: extern struct hash *hash_create_size (unsigned int, unsigned int (*) (void *),
64: int (*) (const void *, const void *));
65:
66: extern void *hash_get (struct hash *, void *, void * (*) (void *));
67: extern void *hash_alloc_intern (void *);
68: extern void *hash_lookup (struct hash *, void *);
69: extern void *hash_release (struct hash *, void *);
70:
71: extern void hash_iterate (struct hash *,
72: void (*) (struct hash_backet *, void *), void *);
73:
74: extern void hash_clean (struct hash *, void (*) (void *));
75: extern void hash_free (struct hash *);
76:
77: extern unsigned int string_hash_make (const char *);
78:
79: #endif /* _ZEBRA_HASH_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>