Changes GC.cs
[mono-project.git] / mono / utils / mono-value-hash.h
blob7702844ad9eea47dda9242d766df882491788a6e
1 /**
2 * \file
3 * A hash table which only stores values in the hash nodes.
5 * Author:
6 * Mark Probst (mark.probst@gmail.com)
7 * Zoltan Varga (vargaz@gmail.com)
9 * (C) 2008 Novell, Inc.
12 #ifndef __MONO_UTILS_MONO_VALUE_HASH__
13 #define __MONO_UTILS_MONO_VALUE_HASH__
15 #include <glib.h>
16 #include "mono-compiler.h"
19 * This is a hash table with the following features/restrictions:
20 * - Keys are not stored in the table, instead a function must be supplied which
21 * computes them from the value.
22 * - Values are assumed to be normal pointers, i.e. their lowest 2-3 bits should be
23 * zero.
24 * - NULL values are not allowed.
25 * - It uses internal probing instead of chaining.
26 * - The above restrictions mean that this hash table will be somewhat slower than
27 * hash tables which store the key (or even the key hash) in the hash nodes. But
28 * it also means that each hash node has a size of one machine word, instead of
29 * 4 in GHashTable.
30 * - Removal of entries is not supported, as it is not needed by the runtime right
31 * now.
34 typedef struct _MonoValueHashTable MonoValueHashTable;
36 typedef gpointer (*MonoValueHashKeyExtractFunc) (gpointer value);
38 MonoValueHashTable* mono_value_hash_table_new (GHashFunc hash_func,
39 GEqualFunc key_equal_func,
40 MonoValueHashKeyExtractFunc key_extract);
42 void
43 mono_value_hash_table_destroy (MonoValueHashTable *table);
45 gpointer
46 mono_value_hash_table_lookup (MonoValueHashTable *table, gconstpointer key);
48 /* The key pointer is actually only passed here to check a debugging
49 assertion and to make the API look more familiar. */
50 void
51 mono_value_hash_table_insert (MonoValueHashTable *table,
52 gpointer key, gpointer value);
54 #endif