1/* GLIB - Library of useful routines for C programming
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
16 */
17
18/*
19 * Modified by the GLib Team and others 1997-2000. See the AUTHORS
20 * file for a list of people on the GLib Team. See the ChangeLog
21 * files for a list of changes. These files are distributed with
22 * GLib at ftp://ftp.gtk.org/pub/gtk/.
23 */
24
25#ifndef __G_HASH_H__
26#define __G_HASH_H__
27
28#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
29#error "Only <glib.h> can be included directly."
30#endif
31
32#include <glib/gtypes.h>
33#include <glib/glist.h>
34
35G_BEGIN_DECLS
36
37typedef struct _GHashTable GHashTable;
38
39typedef gboolean (*GHRFunc) (gpointer key,
40 gpointer value,
41 gpointer user_data);
42
43typedef struct _GHashTableIter GHashTableIter;
44
45struct _GHashTableIter
46{
47 /*< private >*/
48 gpointer dummy1;
49 gpointer dummy2;
50 gpointer dummy3;
51 int dummy4;
52 gboolean dummy5;
53 gpointer dummy6;
54};
55
56GLIB_AVAILABLE_IN_ALL
57GHashTable* g_hash_table_new (GHashFunc hash_func,
58 GEqualFunc key_equal_func);
59GLIB_AVAILABLE_IN_ALL
60GHashTable* g_hash_table_new_full (GHashFunc hash_func,
61 GEqualFunc key_equal_func,
62 GDestroyNotify key_destroy_func,
63 GDestroyNotify value_destroy_func);
64GLIB_AVAILABLE_IN_ALL
65void g_hash_table_destroy (GHashTable *hash_table);
66GLIB_AVAILABLE_IN_ALL
67gboolean g_hash_table_insert (GHashTable *hash_table,
68 gpointer key,
69 gpointer value);
70GLIB_AVAILABLE_IN_ALL
71gboolean g_hash_table_replace (GHashTable *hash_table,
72 gpointer key,
73 gpointer value);
74GLIB_AVAILABLE_IN_ALL
75gboolean g_hash_table_add (GHashTable *hash_table,
76 gpointer key);
77GLIB_AVAILABLE_IN_ALL
78gboolean g_hash_table_remove (GHashTable *hash_table,
79 gconstpointer key);
80GLIB_AVAILABLE_IN_ALL
81void g_hash_table_remove_all (GHashTable *hash_table);
82GLIB_AVAILABLE_IN_ALL
83gboolean g_hash_table_steal (GHashTable *hash_table,
84 gconstpointer key);
85GLIB_AVAILABLE_IN_ALL
86void g_hash_table_steal_all (GHashTable *hash_table);
87GLIB_AVAILABLE_IN_ALL
88gpointer g_hash_table_lookup (GHashTable *hash_table,
89 gconstpointer key);
90GLIB_AVAILABLE_IN_ALL
91gboolean g_hash_table_contains (GHashTable *hash_table,
92 gconstpointer key);
93GLIB_AVAILABLE_IN_ALL
94gboolean g_hash_table_lookup_extended (GHashTable *hash_table,
95 gconstpointer lookup_key,
96 gpointer *orig_key,
97 gpointer *value);
98GLIB_AVAILABLE_IN_ALL
99void g_hash_table_foreach (GHashTable *hash_table,
100 GHFunc func,
101 gpointer user_data);
102GLIB_AVAILABLE_IN_ALL
103gpointer g_hash_table_find (GHashTable *hash_table,
104 GHRFunc predicate,
105 gpointer user_data);
106GLIB_AVAILABLE_IN_ALL
107guint g_hash_table_foreach_remove (GHashTable *hash_table,
108 GHRFunc func,
109 gpointer user_data);
110GLIB_AVAILABLE_IN_ALL
111guint g_hash_table_foreach_steal (GHashTable *hash_table,
112 GHRFunc func,
113 gpointer user_data);
114GLIB_AVAILABLE_IN_ALL
115guint g_hash_table_size (GHashTable *hash_table);
116GLIB_AVAILABLE_IN_ALL
117GList * g_hash_table_get_keys (GHashTable *hash_table);
118GLIB_AVAILABLE_IN_ALL
119GList * g_hash_table_get_values (GHashTable *hash_table);
120GLIB_AVAILABLE_IN_2_40
121gpointer * g_hash_table_get_keys_as_array (GHashTable *hash_table,
122 guint *length);
123
124GLIB_AVAILABLE_IN_ALL
125void g_hash_table_iter_init (GHashTableIter *iter,
126 GHashTable *hash_table);
127GLIB_AVAILABLE_IN_ALL
128gboolean g_hash_table_iter_next (GHashTableIter *iter,
129 gpointer *key,
130 gpointer *value);
131GLIB_AVAILABLE_IN_ALL
132GHashTable* g_hash_table_iter_get_hash_table (GHashTableIter *iter);
133GLIB_AVAILABLE_IN_ALL
134void g_hash_table_iter_remove (GHashTableIter *iter);
135GLIB_AVAILABLE_IN_2_30
136void g_hash_table_iter_replace (GHashTableIter *iter,
137 gpointer value);
138GLIB_AVAILABLE_IN_ALL
139void g_hash_table_iter_steal (GHashTableIter *iter);
140
141GLIB_AVAILABLE_IN_ALL
142GHashTable* g_hash_table_ref (GHashTable *hash_table);
143GLIB_AVAILABLE_IN_ALL
144void g_hash_table_unref (GHashTable *hash_table);
145
146#ifndef G_DISABLE_DEPRECATED
147#define g_hash_table_freeze(hash_table) ((void)0)
148#define g_hash_table_thaw(hash_table) ((void)0)
149#endif
150
151/* Hash Functions
152 */
153GLIB_AVAILABLE_IN_ALL
154gboolean g_str_equal (gconstpointer v1,
155 gconstpointer v2);
156GLIB_AVAILABLE_IN_ALL
157guint g_str_hash (gconstpointer v);
158
159GLIB_AVAILABLE_IN_ALL
160gboolean g_int_equal (gconstpointer v1,
161 gconstpointer v2);
162GLIB_AVAILABLE_IN_ALL
163guint g_int_hash (gconstpointer v);
164
165GLIB_AVAILABLE_IN_ALL
166gboolean g_int64_equal (gconstpointer v1,
167 gconstpointer v2);
168GLIB_AVAILABLE_IN_ALL
169guint g_int64_hash (gconstpointer v);
170
171GLIB_AVAILABLE_IN_ALL
172gboolean g_double_equal (gconstpointer v1,
173 gconstpointer v2);
174GLIB_AVAILABLE_IN_ALL
175guint g_double_hash (gconstpointer v);
176
177GLIB_AVAILABLE_IN_ALL
178guint g_direct_hash (gconstpointer v) G_GNUC_CONST;
179GLIB_AVAILABLE_IN_ALL
180gboolean g_direct_equal (gconstpointer v1,
181 gconstpointer v2) G_GNUC_CONST;
182
183G_END_DECLS
184
185#endif /* __G_HASH_H__ */
186