Annotation of embedaddon/quagga/lib/hash.h, revision 1.1.1.2
1.1 misho 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. */
1.1.1.2 ! misho 25: #define HASH_INITIAL_SIZE 256 /* initial number of backets. */
! 26: #define HASH_THRESHOLD 10 /* expand when backet. */
1.1 misho 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:
1.1.1.2 ! misho 45: /* Hash table size. Must be power of 2 */
1.1 misho 46: unsigned int size;
1.1.1.2 ! misho 47:
! 48: /* If expansion failed. */
! 49: int no_expand;
1.1 misho 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>