Electroneum
Loading...
Searching...
No Matches
slabhash.h
Go to the documentation of this file.
1/*
2 * util/storage/slabhash.h - hashtable consisting of several smaller tables.
3 *
4 * Copyright (c) 2007, NLnet Labs. All rights reserved.
5 *
6 * This software is open source.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * Redistributions of source code must retain the above copyright notice,
13 * this list of conditions and the following disclaimer.
14 *
15 * Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 *
19 * Neither the name of the NLNET LABS nor the names of its contributors may
20 * be used to endorse or promote products derived from this software without
21 * specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
29 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 */
35
43
44#ifndef UTIL_STORAGE_SLABHASH_H
45#define UTIL_STORAGE_SLABHASH_H
47
49#define HASH_DEFAULT_SLABS 4
50
57struct slabhash {
59 size_t size;
63 unsigned int shift;
65 struct lruhash** array;
66};
67
82struct slabhash* slabhash_create(size_t numtables, size_t start_size,
83 size_t maxmem, lruhash_sizefunc_type sizefunc,
85 lruhash_deldatafunc_type deldatafunc, void* arg);
86
91void slabhash_delete(struct slabhash* table);
92
97void slabhash_clear(struct slabhash* table);
98
112void slabhash_insert(struct slabhash* table, hashvalue_type hash,
113 struct lruhash_entry* entry, void* data, void* cb_override);
114
129 hashvalue_type hash, void* key, int wr);
130
138void slabhash_remove(struct slabhash* table, hashvalue_type hash, void* key);
139
146void slabhash_status(struct slabhash* table, const char* id, int extended);
147
153size_t slabhash_get_size(struct slabhash* table);
154
160size_t slabhash_get_mem(struct slabhash* table);
161
169
176
184void slabhash_traverse(struct slabhash* table, int wr,
185 void (*func)(struct lruhash_entry*, void*), void* arg);
186
187/*
188 * Count entries in slabhash.
189 * @param table: slabbed hash table;
190 * @return the number of items
191 */
192size_t count_slabhash_entries(struct slabhash* table);
193
194/* --- test representation --- */
198 int id;
201};
202
205 int data;
206};
207
209size_t test_slabhash_sizefunc(void*, void*);
211int test_slabhash_compfunc(void*, void*);
213void test_slabhash_delkey(void*, void*);
215void test_slabhash_deldata(void*, void*);
216/* --- end test representation --- */
217
218#endif /* UTIL_STORAGE_SLABHASH_H */
const char * key
uint32_t hashvalue_type
Definition lruhash.h:119
int(* lruhash_compfunc_type)(void *, void *)
Definition lruhash.h:130
void(* lruhash_deldatafunc_type)(void *, void *)
Definition lruhash.h:138
void(* lruhash_delkeyfunc_type)(void *, void *)
Definition lruhash.h:135
size_t(* lruhash_sizefunc_type)(void *, void *)
Definition lruhash.h:127
void(* lruhash_markdelfunc_type)(void *)
Definition lruhash.h:142
size_t count_slabhash_entries(struct slabhash *table)
void slabhash_insert(struct slabhash *table, hashvalue_type hash, struct lruhash_entry *entry, void *data, void *cb_override)
struct slabhash * slabhash_create(size_t numtables, size_t start_size, size_t maxmem, lruhash_sizefunc_type sizefunc, lruhash_compfunc_type compfunc, lruhash_delkeyfunc_type delkeyfunc, lruhash_deldatafunc_type deldatafunc, void *arg)
void slabhash_traverse(struct slabhash *table, int wr, void(*func)(struct lruhash_entry *, void *), void *arg)
void test_slabhash_deldata(void *, void *)
int test_slabhash_compfunc(void *, void *)
struct lruhash_entry * slabhash_lookup(struct slabhash *table, hashvalue_type hash, void *key, int wr)
size_t slabhash_get_mem(struct slabhash *table)
void slabhash_setmarkdel(struct slabhash *table, lruhash_markdelfunc_type md)
size_t slabhash_get_size(struct slabhash *table)
void slabhash_delete(struct slabhash *table)
void slabhash_status(struct slabhash *table, const char *id, int extended)
struct lruhash * slabhash_gettable(struct slabhash *table, hashvalue_type hash)
void slabhash_clear(struct slabhash *table)
void test_slabhash_delkey(void *, void *)
void slabhash_remove(struct slabhash *table, hashvalue_type hash, void *key)
size_t test_slabhash_sizefunc(void *, void *)
unsigned int uint32_t
Definition stdint.h:126
Definition lruhash.h:203
hashvalue_type hash
Definition lruhash.h:218
struct lruhash_entry entry
Definition slabhash.h:200
uint32_t mask
Definition slabhash.h:61
struct lruhash ** array
Definition slabhash.h:65
unsigned int shift
Definition slabhash.h:63
size_t size
Definition slabhash.h:59