Electroneum
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 
44 #ifndef UTIL_STORAGE_SLABHASH_H
45 #define UTIL_STORAGE_SLABHASH_H
46 #include "util/storage/lruhash.h"
47 
49 #define HASH_DEFAULT_SLABS 4
50 
57 struct slabhash {
59  size_t size;
63  unsigned int shift;
65  struct lruhash** array;
66 };
67 
82 struct slabhash* slabhash_create(size_t numtables, size_t start_size,
83  size_t maxmem, lruhash_sizefunc_type sizefunc,
84  lruhash_compfunc_type compfunc, lruhash_delkeyfunc_type delkeyfunc,
85  lruhash_deldatafunc_type deldatafunc, void* arg);
86 
91 void slabhash_delete(struct slabhash* table);
92 
97 void slabhash_clear(struct slabhash* table);
98 
113  struct lruhash_entry* entry, void* data, void* cb_override);
114 
129  hashvalue_type hash, void* key, int wr);
130 
138 void slabhash_remove(struct slabhash* table, hashvalue_type hash, void* key);
139 
146 void slabhash_status(struct slabhash* table, const char* id, int extended);
147 
153 size_t slabhash_get_size(struct slabhash* table);
154 
160 size_t slabhash_get_mem(struct slabhash* table);
161 
169 
176 
184 void 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  */
192 size_t count_slabhash_entries(struct slabhash* table);
193 
194 /* --- test representation --- */
198  int id;
201 };
205  int data;
206 };
207 
209 size_t test_slabhash_sizefunc(void*, void*);
211 int test_slabhash_compfunc(void*, void*);
213 void test_slabhash_delkey(void*, void*);
215 void test_slabhash_deldata(void*, void*);
216 /* --- end test representation --- */
217 
218 #endif /* UTIL_STORAGE_SLABHASH_H */
std::vector< std::vector< _variant_t > > table
size_t slabhash_get_size(struct slabhash *table)
void(* lruhash_deldatafunc_type)(void *, void *)
Definition: lruhash.h:138
void slabhash_setmarkdel(struct slabhash *table, lruhash_markdelfunc_type md)
struct lruhash * slabhash_gettable(struct slabhash *table, hashvalue_type hash)
const char * key
Definition: hmac_keccak.cpp:39
void(* lruhash_markdelfunc_type)(void *)
Definition: lruhash.h:142
void slabhash_insert(struct slabhash *table, hashvalue_type hash, struct lruhash_entry *entry, void *data, void *cb_override)
void slabhash_traverse(struct slabhash *table, int wr, void(*func)(struct lruhash_entry *, void *), void *arg)
void slabhash_remove(struct slabhash *table, hashvalue_type hash, void *key)
void test_slabhash_delkey(void *, void *)
size_t count_slabhash_entries(struct slabhash *table)
size_t test_slabhash_sizefunc(void *, void *)
struct lruhash_entry entry
Definition: slabhash.h:200
int test_slabhash_compfunc(void *, void *)
uint32_t mask
Definition: slabhash.h:61
void(* lruhash_delkeyfunc_type)(void *, void *)
Definition: lruhash.h:135
unsigned int uint32_t
Definition: stdint.h:126
size_t size
Definition: slabhash.h:59
void test_slabhash_deldata(void *, void *)
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)
uint32_t hashvalue_type
Definition: lruhash.h:119
unsigned int shift
Definition: slabhash.h:63
struct lruhash_entry * slabhash_lookup(struct slabhash *table, hashvalue_type hash, void *key, int wr)
int(* lruhash_compfunc_type)(void *, void *)
Definition: lruhash.h:130
void slabhash_status(struct slabhash *table, const char *id, int extended)
void slabhash_delete(struct slabhash *table)
void slabhash_clear(struct slabhash *table)
struct lruhash ** array
Definition: slabhash.h:65
size_t(* lruhash_sizefunc_type)(void *, void *)
Definition: lruhash.h:127
POD_CLASS hash
Definition: hash.h:50
Definition: lruhash.h:203
size_t slabhash_get_mem(struct slabhash *table)