1/*	$NetBSD: hash.h,v 1.1.1.1 2008/12/22 00:18:36 haad Exp $	*/
2
3/*
4 * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
5 * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
6 *
7 * This file is part of the device-mapper userspace tools.
8 *
9 * This copyrighted material is made available to anyone wishing to use,
10 * modify, copy, or redistribute it subject to the terms and conditions
11 * of the GNU Lesser General Public License v.2.1.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program; if not, write to the Free Software Foundation,
15 * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16 */
17
18#ifndef _DM_HASH_H
19#define _DM_HASH_H
20
21struct hash_table;
22struct hash_node;
23
24typedef void (*iterate_fn) (void *data);
25
26struct hash_table *hash_create(unsigned size_hint);
27void hash_destroy(struct hash_table *t);
28void hash_wipe(struct hash_table *t);
29
30void *hash_lookup(struct hash_table *t, const char *key);
31int hash_insert(struct hash_table *t, const char *key, void *data);
32void hash_remove(struct hash_table *t, const char *key);
33
34void *hash_lookup_binary(struct hash_table *t, const char *key, uint32_t len);
35int hash_insert_binary(struct hash_table *t, const char *key, uint32_t len,
36		       void *data);
37void hash_remove_binary(struct hash_table *t, const char *key, uint32_t len);
38
39unsigned hash_get_num_entries(struct hash_table *t);
40void hash_iter(struct hash_table *t, iterate_fn f);
41
42char *hash_get_key(struct hash_table *t, struct hash_node *n);
43void *hash_get_data(struct hash_table *t, struct hash_node *n);
44struct hash_node *hash_get_first(struct hash_table *t);
45struct hash_node *hash_get_next(struct hash_table *t, struct hash_node *n);
46
47#define hash_iterate(v, h) \
48	for (v = hash_get_first(h); v; \
49	     v = hash_get_next(h, v))
50
51#endif
52