2 * mono-value-hash.h: A hash table which only stores values in the hash nodes.
5 * Mark Probst (mark.probst@gmail.com)
6 * Zoltan Varga (vargaz@gmail.com)
8 * (C) 2008 Novell, Inc.
11 #ifndef __MONO_UTILS_MONO_VALUE_HASH__
12 #define __MONO_UTILS_MONO_VALUE_HASH__
15 #include "mono-compiler.h"
20 * This is a hash table with the following features/restrictions:
21 * - Keys are not stored in the table, instead a function must be supplied which
22 * computes them from the value.
23 * - Values are assumed to be normal pointers, i.e. their lowest 2-3 bits should be
25 * - NULL values are not allowed.
26 * - It uses internal probing instead of chaining.
27 * - The above restrictions mean that this hash table will be somewhat slower than
28 * hash tables which store the key (or even the key hash) in the hash nodes. But
29 * it also means that each hash node has a size of one machine word, instead of
31 * - Removal of entries is not supported, as it is not needed by the runtime right
35 typedef struct _MonoValueHashTable MonoValueHashTable
;
37 typedef gpointer (*MonoValueHashKeyExtractFunc
) (gpointer value
);
39 MonoValueHashTable
* mono_value_hash_table_new (GHashFunc hash_func
,
40 GEqualFunc key_equal_func
,
41 MonoValueHashKeyExtractFunc key_extract
);
44 mono_value_hash_table_destroy (MonoValueHashTable
*table
);
47 mono_value_hash_table_lookup (MonoValueHashTable
*table
, gconstpointer key
);
49 /* The key pointer is actually only passed here to check a debugging
50 assertion and to make the API look more familiar. */
52 mono_value_hash_table_insert (MonoValueHashTable
*table
,
53 gpointer key
, gpointer value
);