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