source: mainline/uspace/lib/c/include/adt/hash_table.h@ dbd3dfb

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since dbd3dfb was 2732c94, checked in by Adam Hraska <adam.hraska+hos@…>, 14 years ago

Replaced separate uspace hash_set implementation with uspace's hash_table.

  • Property mode set to 100644
File size: 3.3 KB
Line 
1/*
2 * Copyright (c) 2006 Jakub Jermar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup libc
30 * @{
31 */
32/** @file
33 */
34
35#ifndef LIBC_HASH_TABLE_H_
36#define LIBC_HASH_TABLE_H_
37
38#include <adt/list.h>
39#include <unistd.h>
40#include <bool.h>
41
42
43/** Set of operations for hash table. */
44typedef struct {
45 /** Returns the hash of the key stored in the item.
46 */
47 size_t (*hash)(const link_t *item);
48
49 /** Returns the hash of the key.
50 */
51 size_t (*key_hash)(unsigned long key[]);
52
53 /** Hash table item match function.
54 *
55 * @param key Array of keys that will be compared with item. It is
56 * not necessary to pass all keys.
57 *
58 * @return True if the keys match, false otherwise.
59 *
60 */
61 bool (*match)(unsigned long key[], size_t keys, const link_t *item);
62
63 /**
64 */
65 bool (*equal)(const link_t *item1, const link_t *item2);
66
67 /** Hash table item removal callback.
68 *
69 * Must not invoke any mutating functions of the hash table.
70 *
71 * @param item Item that was removed from the hash table.
72 */
73 void (*remove_callback)(link_t *item);
74} hash_table_ops_t;
75
76/** Hash table structure. */
77typedef struct {
78 list_t *bucket;
79 size_t bucket_cnt;
80 size_t max_keys;
81 size_t items;
82 hash_table_ops_t *op;
83} hash_table_t;
84
85#define hash_table_get_instance(item, type, member) \
86 list_get_instance((item), type, member)
87
88extern bool hash_table_create(hash_table_t *, size_t, size_t,
89 hash_table_ops_t *);
90extern void hash_table_clear(hash_table_t *);
91extern void hash_table_insert(hash_table_t *, link_t *);
92extern bool hash_table_insert_unique(hash_table_t *, link_t *);
93extern link_t *hash_table_find(const hash_table_t *, unsigned long []);
94extern size_t hash_table_remove(hash_table_t *, unsigned long [], size_t);
95extern void hash_table_remove_item(hash_table_t *, link_t *);
96extern void hash_table_destroy(hash_table_t *);
97extern void hash_table_apply(hash_table_t *, bool (*)(link_t *, void *),
98 void *);
99
100
101#endif
102
103/** @}
104 */
Note: See TracBrowser for help on using the repository browser.