1 /* multimap.c generated by valac 0.46.6, the Vala compiler
2  * generated from multimap.vala, do not modify */
3 
4 /* multimap.vala
5  *
6  * Copyright (C) 2009  Ali Sabil
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12 
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17 
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
21  *
22  * Author:
23  * 	Ali Sabil <ali.sabil@gmail.com>
24  */
25 
26 #include <glib-object.h>
27 #include <glib.h>
28 
29 #define GEE_TYPE_MULTI_MAP (gee_multi_map_get_type ())
30 #define GEE_MULTI_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_MULTI_MAP, GeeMultiMap))
31 #define GEE_IS_MULTI_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_MULTI_MAP))
32 #define GEE_MULTI_MAP_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_MULTI_MAP, GeeMultiMapIface))
33 
34 typedef struct _GeeMultiMap GeeMultiMap;
35 typedef struct _GeeMultiMapIface GeeMultiMapIface;
36 
37 #define GEE_TYPE_SET (gee_set_get_type ())
38 #define GEE_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_SET, GeeSet))
39 #define GEE_IS_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_SET))
40 #define GEE_SET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_SET, GeeSetIface))
41 
42 typedef struct _GeeSet GeeSet;
43 typedef struct _GeeSetIface GeeSetIface;
44 
45 #define GEE_TYPE_COLLECTION (gee_collection_get_type ())
46 #define GEE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_COLLECTION, GeeCollection))
47 #define GEE_IS_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_COLLECTION))
48 #define GEE_COLLECTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_COLLECTION, GeeCollectionIface))
49 
50 typedef struct _GeeCollection GeeCollection;
51 typedef struct _GeeCollectionIface GeeCollectionIface;
52 
53 #define GEE_TYPE_ITERABLE (gee_iterable_get_type ())
54 #define GEE_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERABLE, GeeIterable))
55 #define GEE_IS_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERABLE))
56 #define GEE_ITERABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERABLE, GeeIterableIface))
57 
58 typedef struct _GeeIterable GeeIterable;
59 typedef struct _GeeIterableIface GeeIterableIface;
60 
61 #define GEE_TYPE_TRAVERSABLE (gee_traversable_get_type ())
62 #define GEE_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversable))
63 #define GEE_IS_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_TRAVERSABLE))
64 #define GEE_TRAVERSABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversableIface))
65 
66 typedef struct _GeeTraversable GeeTraversable;
67 typedef struct _GeeTraversableIface GeeTraversableIface;
68 typedef gboolean (*GeeForallFunc) (gpointer g, gpointer user_data);
69 typedef enum  {
70 	GEE_TRAVERSABLE_STREAM_YIELD,
71 	GEE_TRAVERSABLE_STREAM_CONTINUE,
72 	GEE_TRAVERSABLE_STREAM_END,
73 	GEE_TRAVERSABLE_STREAM_WAIT
74 } GeeTraversableStream;
75 
76 #define GEE_TRAVERSABLE_TYPE_STREAM (gee_traversable_stream_get_type ())
77 
78 #define GEE_TYPE_LAZY (gee_lazy_get_type ())
79 #define GEE_LAZY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_LAZY, GeeLazy))
80 #define GEE_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_LAZY, GeeLazyClass))
81 #define GEE_IS_LAZY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_LAZY))
82 #define GEE_IS_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_LAZY))
83 #define GEE_LAZY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_LAZY, GeeLazyClass))
84 
85 typedef struct _GeeLazy GeeLazy;
86 typedef struct _GeeLazyClass GeeLazyClass;
87 typedef GeeTraversableStream (*GeeStreamFunc) (GeeTraversableStream state, GeeLazy* g, GeeLazy* * lazy, gpointer user_data);
88 
89 #define GEE_TYPE_ITERATOR (gee_iterator_get_type ())
90 #define GEE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERATOR, GeeIterator))
91 #define GEE_IS_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERATOR))
92 #define GEE_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERATOR, GeeIteratorIface))
93 
94 typedef struct _GeeIterator GeeIterator;
95 typedef struct _GeeIteratorIface GeeIteratorIface;
96 typedef gpointer (*GeeFoldFunc) (gpointer g, gpointer a, gpointer user_data);
97 typedef gpointer (*GeeMapFunc) (gpointer g, gpointer user_data);
98 typedef gboolean (*GeePredicate) (gconstpointer g, gpointer user_data);
99 typedef GeeIterator* (*GeeFlatMapFunc) (gpointer g, gpointer user_data);
100 
101 #define GEE_TYPE_MULTI_SET (gee_multi_set_get_type ())
102 #define GEE_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_MULTI_SET, GeeMultiSet))
103 #define GEE_IS_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_MULTI_SET))
104 #define GEE_MULTI_SET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_MULTI_SET, GeeMultiSetIface))
105 
106 typedef struct _GeeMultiSet GeeMultiSet;
107 typedef struct _GeeMultiSetIface GeeMultiSetIface;
108 
109 #define GEE_TYPE_MAP_ITERATOR (gee_map_iterator_get_type ())
110 #define GEE_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_MAP_ITERATOR, GeeMapIterator))
111 #define GEE_IS_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_MAP_ITERATOR))
112 #define GEE_MAP_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_MAP_ITERATOR, GeeMapIteratorIface))
113 
114 typedef struct _GeeMapIterator GeeMapIterator;
115 typedef struct _GeeMapIteratorIface GeeMapIteratorIface;
116 typedef gpointer (*GeeFoldMapFunc) (gconstpointer k, gconstpointer v, gpointer a, gpointer user_data);
117 typedef gboolean (*GeeForallMapFunc) (gconstpointer k, gconstpointer v, gpointer user_data);
118 
119 #define GEE_TYPE_READ_ONLY_MULTI_MAP (gee_read_only_multi_map_get_type ())
120 #define GEE_READ_ONLY_MULTI_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_READ_ONLY_MULTI_MAP, GeeReadOnlyMultiMap))
121 #define GEE_READ_ONLY_MULTI_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_READ_ONLY_MULTI_MAP, GeeReadOnlyMultiMapClass))
122 #define GEE_IS_READ_ONLY_MULTI_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_READ_ONLY_MULTI_MAP))
123 #define GEE_IS_READ_ONLY_MULTI_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_READ_ONLY_MULTI_MAP))
124 #define GEE_READ_ONLY_MULTI_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_READ_ONLY_MULTI_MAP, GeeReadOnlyMultiMapClass))
125 
126 typedef struct _GeeReadOnlyMultiMap GeeReadOnlyMultiMap;
127 typedef struct _GeeReadOnlyMultiMapClass GeeReadOnlyMultiMapClass;
128 
129 struct _GeeIteratorIface {
130 	GTypeInterface parent_iface;
131 	gboolean (*next) (GeeIterator* self);
132 	gboolean (*has_next) (GeeIterator* self);
133 	gpointer (*get) (GeeIterator* self);
134 	void (*remove) (GeeIterator* self);
135 	gboolean (*get_valid) (GeeIterator* self);
136 	gboolean (*get_read_only) (GeeIterator* self);
137 };
138 
139 struct _GeeTraversableIface {
140 	GTypeInterface parent_iface;
141 	GType (*get_g_type) (GeeTraversable* self);
142 	GBoxedCopyFunc (*get_g_dup_func) (GeeTraversable* self);
143 	GDestroyNotify (*get_g_destroy_func) (GeeTraversable* self);
144 	gboolean (*foreach) (GeeTraversable* self, GeeForallFunc f, gpointer f_target);
145 	GeeIterator* (*stream) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeStreamFunc f, gpointer f_target, GDestroyNotify f_target_destroy_notify);
146 	gpointer (*fold) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, gpointer f_target, gpointer seed);
147 	GeeIterator* (*map) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeMapFunc f, gpointer f_target);
148 	GeeIterator* (*scan) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, gpointer f_target, gpointer seed);
149 	GeeIterator* (*filter) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
150 	GeeIterator* (*chop) (GeeTraversable* self, gint offset, gint length);
151 	GType (*get_element_type) (GeeTraversable* self);
152 	GeeIterator* (*flat_map) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFlatMapFunc f, gpointer f_target, GDestroyNotify f_target_destroy_notify);
153 	GeeIterator** (*tee) (GeeTraversable* self, guint forks, gint* result_length1);
154 	gpointer (*first_match) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
155 	gboolean (*any_match) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
156 	gboolean (*all_match) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
157 	gpointer (*max) (GeeTraversable* self, GCompareDataFunc compare, gpointer compare_target, GDestroyNotify compare_target_destroy_notify);
158 	gpointer (*min) (GeeTraversable* self, GCompareDataFunc compare, gpointer compare_target, GDestroyNotify compare_target_destroy_notify);
159 	GeeIterator* (*order_by) (GeeTraversable* self, GCompareDataFunc compare, gpointer compare_target, GDestroyNotify compare_target_destroy_notify);
160 };
161 
162 struct _GeeIterableIface {
163 	GTypeInterface parent_iface;
164 	GType (*get_g_type) (GeeIterable* self);
165 	GBoxedCopyFunc (*get_g_dup_func) (GeeIterable* self);
166 	GDestroyNotify (*get_g_destroy_func) (GeeIterable* self);
167 	GeeIterator* (*iterator) (GeeIterable* self);
168 };
169 
170 struct _GeeCollectionIface {
171 	GTypeInterface parent_iface;
172 	GType (*get_g_type) (GeeCollection* self);
173 	GBoxedCopyFunc (*get_g_dup_func) (GeeCollection* self);
174 	GDestroyNotify (*get_g_destroy_func) (GeeCollection* self);
175 	gboolean (*contains) (GeeCollection* self, gconstpointer item);
176 	gboolean (*add) (GeeCollection* self, gconstpointer item);
177 	gboolean (*remove) (GeeCollection* self, gconstpointer item);
178 	void (*clear) (GeeCollection* self);
179 	gboolean (*add_all) (GeeCollection* self, GeeCollection* collection);
180 	gboolean (*contains_all) (GeeCollection* self, GeeCollection* collection);
181 	gboolean (*remove_all) (GeeCollection* self, GeeCollection* collection);
182 	gboolean (*retain_all) (GeeCollection* self, GeeCollection* collection);
183 	gpointer* (*to_array) (GeeCollection* self, gint* result_length1);
184 	gint (*get_size) (GeeCollection* self);
185 	gboolean (*get_is_empty) (GeeCollection* self);
186 	gboolean (*get_read_only) (GeeCollection* self);
187 	GeeCollection* (*get_read_only_view) (GeeCollection* self);
188 	gboolean (*add_all_array) (GeeCollection* self, gpointer* array, gint array_length1);
189 	gboolean (*contains_all_array) (GeeCollection* self, gpointer* array, gint array_length1);
190 	gboolean (*remove_all_array) (GeeCollection* self, gpointer* array, gint array_length1);
191 	gboolean (*add_all_iterator) (GeeCollection* self, GeeIterator* iter);
192 	gboolean (*contains_all_iterator) (GeeCollection* self, GeeIterator* iter);
193 	gboolean (*remove_all_iterator) (GeeCollection* self, GeeIterator* iter);
194 };
195 
196 struct _GeeSetIface {
197 	GTypeInterface parent_iface;
198 	GType (*get_g_type) (GeeSet* self);
199 	GBoxedCopyFunc (*get_g_dup_func) (GeeSet* self);
200 	GDestroyNotify (*get_g_destroy_func) (GeeSet* self);
201 	GeeSet* (*get_read_only_view) (GeeSet* self);
202 };
203 
204 struct _GeeMultiSetIface {
205 	GTypeInterface parent_iface;
206 	GType (*get_g_type) (GeeMultiSet* self);
207 	GBoxedCopyFunc (*get_g_dup_func) (GeeMultiSet* self);
208 	GDestroyNotify (*get_g_destroy_func) (GeeMultiSet* self);
209 	gint (*count) (GeeMultiSet* self, gconstpointer item);
210 	GeeMultiSet* (*get_read_only_view) (GeeMultiSet* self);
211 };
212 
213 struct _GeeMapIteratorIface {
214 	GTypeInterface parent_iface;
215 	GType (*get_k_type) (GeeMapIterator* self);
216 	GBoxedCopyFunc (*get_k_dup_func) (GeeMapIterator* self);
217 	GDestroyNotify (*get_k_destroy_func) (GeeMapIterator* self);
218 	GType (*get_v_type) (GeeMapIterator* self);
219 	GBoxedCopyFunc (*get_v_dup_func) (GeeMapIterator* self);
220 	GDestroyNotify (*get_v_destroy_func) (GeeMapIterator* self);
221 	gboolean (*next) (GeeMapIterator* self);
222 	gboolean (*has_next) (GeeMapIterator* self);
223 	gpointer (*get_key) (GeeMapIterator* self);
224 	gpointer (*get_value) (GeeMapIterator* self);
225 	void (*set_value) (GeeMapIterator* self, gconstpointer value);
226 	void (*unset) (GeeMapIterator* self);
227 	gpointer (*fold) (GeeMapIterator* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldMapFunc f, gpointer f_target, gpointer seed);
228 	gboolean (*foreach) (GeeMapIterator* self, GeeForallMapFunc f, gpointer f_target);
229 	gboolean (*get_valid) (GeeMapIterator* self);
230 	gboolean (*get_mutable) (GeeMapIterator* self);
231 	gboolean (*get_read_only) (GeeMapIterator* self);
232 };
233 
234 struct _GeeMultiMapIface {
235 	GTypeInterface parent_iface;
236 	GType (*get_k_type) (GeeMultiMap* self);
237 	GBoxedCopyFunc (*get_k_dup_func) (GeeMultiMap* self);
238 	GDestroyNotify (*get_k_destroy_func) (GeeMultiMap* self);
239 	GType (*get_v_type) (GeeMultiMap* self);
240 	GBoxedCopyFunc (*get_v_dup_func) (GeeMultiMap* self);
241 	GDestroyNotify (*get_v_destroy_func) (GeeMultiMap* self);
242 	GeeSet* (*get_keys) (GeeMultiMap* self);
243 	GeeMultiSet* (*get_all_keys) (GeeMultiMap* self);
244 	GeeCollection* (*get_values) (GeeMultiMap* self);
245 	gboolean (*contains) (GeeMultiMap* self, gconstpointer key);
246 	GeeCollection* (*get) (GeeMultiMap* self, gconstpointer key);
247 	void (*set) (GeeMultiMap* self, gconstpointer key, gconstpointer value);
248 	gboolean (*remove) (GeeMultiMap* self, gconstpointer key, gconstpointer value);
249 	gboolean (*remove_all) (GeeMultiMap* self, gconstpointer key);
250 	void (*clear) (GeeMultiMap* self);
251 	GeeMapIterator* (*map_iterator) (GeeMultiMap* self);
252 	gint (*get_size) (GeeMultiMap* self);
253 	gboolean (*get_read_only) (GeeMultiMap* self);
254 	GeeMultiMap* (*get_read_only_view) (GeeMultiMap* self);
255 };
256 
257 GType gee_traversable_stream_get_type (void) G_GNUC_CONST;
258 gpointer gee_lazy_ref (gpointer instance);
259 void gee_lazy_unref (gpointer instance);
260 GParamSpec* gee_param_spec_lazy (const gchar* name,
261                                  const gchar* nick,
262                                  const gchar* blurb,
263                                  GType object_type,
264                                  GParamFlags flags);
265 void gee_value_set_lazy (GValue* value,
266                          gpointer v_object);
267 void gee_value_take_lazy (GValue* value,
268                           gpointer v_object);
269 gpointer gee_value_get_lazy (const GValue* value);
270 GType gee_lazy_get_type (void) G_GNUC_CONST;
271 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeLazy, gee_lazy_unref)
272 GType gee_iterator_get_type (void) G_GNUC_CONST;
273 GType gee_traversable_get_type (void) G_GNUC_CONST;
274 GType gee_iterable_get_type (void) G_GNUC_CONST;
275 GType gee_collection_get_type (void) G_GNUC_CONST;
276 GType gee_set_get_type (void) G_GNUC_CONST;
277 GType gee_multi_set_get_type (void) G_GNUC_CONST;
278 GType gee_map_iterator_get_type (void) G_GNUC_CONST;
279 GType gee_multi_map_get_type (void) G_GNUC_CONST;
280 GeeSet* gee_multi_map_get_keys (GeeMultiMap* self);
281 GeeMultiSet* gee_multi_map_get_all_keys (GeeMultiMap* self);
282 GeeCollection* gee_multi_map_get_values (GeeMultiMap* self);
283 gboolean gee_multi_map_contains (GeeMultiMap* self,
284                                  gconstpointer key);
285 GeeCollection* gee_multi_map_get (GeeMultiMap* self,
286                                   gconstpointer key);
287 void gee_multi_map_set (GeeMultiMap* self,
288                         gconstpointer key,
289                         gconstpointer value);
290 gboolean gee_multi_map_remove (GeeMultiMap* self,
291                                gconstpointer key,
292                                gconstpointer value);
293 gboolean gee_multi_map_remove_all (GeeMultiMap* self,
294                                    gconstpointer key);
295 void gee_multi_map_clear (GeeMultiMap* self);
296 GeeMapIterator* gee_multi_map_map_iterator (GeeMultiMap* self);
297 gint gee_multi_map_get_size (GeeMultiMap* self);
298 gboolean gee_multi_map_get_read_only (GeeMultiMap* self);
299 GType gee_multi_map_get_key_type (GeeMultiMap* self);
300 GType gee_multi_map_get_value_type (GeeMultiMap* self);
301 GeeMultiMap* gee_multi_map_get_read_only_view (GeeMultiMap* self);
302 G_GNUC_INTERNAL GeeReadOnlyMultiMap* gee_read_only_multi_map_new (GType k_type,
303                                                   GBoxedCopyFunc k_dup_func,
304                                                   GDestroyNotify k_destroy_func,
305                                                   GType v_type,
306                                                   GBoxedCopyFunc v_dup_func,
307                                                   GDestroyNotify v_destroy_func,
308                                                   GeeMultiMap* multimap);
309 G_GNUC_INTERNAL GeeReadOnlyMultiMap* gee_read_only_multi_map_construct (GType object_type,
310                                                         GType k_type,
311                                                         GBoxedCopyFunc k_dup_func,
312                                                         GDestroyNotify k_destroy_func,
313                                                         GType v_type,
314                                                         GBoxedCopyFunc v_dup_func,
315                                                         GDestroyNotify v_destroy_func,
316                                                         GeeMultiMap* multimap);
317 G_GNUC_INTERNAL GType gee_read_only_multi_map_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GeeReadOnlyMultiMap,g_object_unref)318 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeReadOnlyMultiMap, g_object_unref)
319 
320 /**
321  * Returns the keys of this multimap as a read-only set.
322  *
323  * @return the keys of the map
324  */
325 GeeSet*
326 gee_multi_map_get_keys (GeeMultiMap* self)
327 {
328 	g_return_val_if_fail (self != NULL, NULL);
329 	return GEE_MULTI_MAP_GET_INTERFACE (self)->get_keys (self);
330 }
331 
332 /**
333  * Returns the keys of this multimap as a read-only set.
334  *
335  * @return the keys of the map
336  */
337 GeeMultiSet*
gee_multi_map_get_all_keys(GeeMultiMap * self)338 gee_multi_map_get_all_keys (GeeMultiMap* self)
339 {
340 	g_return_val_if_fail (self != NULL, NULL);
341 	return GEE_MULTI_MAP_GET_INTERFACE (self)->get_all_keys (self);
342 }
343 
344 /**
345  * Returns the values of this map as a read-only collection.
346  *
347  * @return the values of the map
348  */
349 GeeCollection*
gee_multi_map_get_values(GeeMultiMap * self)350 gee_multi_map_get_values (GeeMultiMap* self)
351 {
352 	g_return_val_if_fail (self != NULL, NULL);
353 	return GEE_MULTI_MAP_GET_INTERFACE (self)->get_values (self);
354 }
355 
356 /**
357  * Determines whether this map contains the specified key.
358  *
359  * @param key the key to locate in the map
360  *
361  * @return    ``true`` if key is found, ``false`` otherwise
362  */
363 gboolean
gee_multi_map_contains(GeeMultiMap * self,gconstpointer key)364 gee_multi_map_contains (GeeMultiMap* self,
365                         gconstpointer key)
366 {
367 	g_return_val_if_fail (self != NULL, FALSE);
368 	return GEE_MULTI_MAP_GET_INTERFACE (self)->contains (self, key);
369 }
370 
371 /**
372  * Returns the values for the specified key in this map.
373  *
374  * @param key the key whose values are to be retrieved
375  *
376  * @return    a Collection of values associated with the given key
377  */
378 GeeCollection*
gee_multi_map_get(GeeMultiMap * self,gconstpointer key)379 gee_multi_map_get (GeeMultiMap* self,
380                    gconstpointer key)
381 {
382 	g_return_val_if_fail (self != NULL, NULL);
383 	return GEE_MULTI_MAP_GET_INTERFACE (self)->get (self, key);
384 }
385 
386 /**
387  * Inserts a key/value pair into this map.
388  *
389  * @param key   the key to insert
390  * @param value the value to associate with the key
391  */
392 void
gee_multi_map_set(GeeMultiMap * self,gconstpointer key,gconstpointer value)393 gee_multi_map_set (GeeMultiMap* self,
394                    gconstpointer key,
395                    gconstpointer value)
396 {
397 	g_return_if_fail (self != NULL);
398 	GEE_MULTI_MAP_GET_INTERFACE (self)->set (self, key, value);
399 }
400 
401 /**
402  * Removes the specified key/value pair from this multimap.
403  *
404  * @param key   the key to remove from the map
405  * @param value the value to remove from the map
406  *
407  * @return      ``true`` if the map has been changed, ``false`` otherwise
408  */
409 gboolean
gee_multi_map_remove(GeeMultiMap * self,gconstpointer key,gconstpointer value)410 gee_multi_map_remove (GeeMultiMap* self,
411                       gconstpointer key,
412                       gconstpointer value)
413 {
414 	g_return_val_if_fail (self != NULL, FALSE);
415 	return GEE_MULTI_MAP_GET_INTERFACE (self)->remove (self, key, value);
416 }
417 
418 /**
419  * Removes the specified key and all the associated values from this
420  * multimap.
421  *
422  * @param key the key to remove from the map
423  *
424  * @return    ``true`` if the map has been changed, ``false`` otherwise
425  */
426 gboolean
gee_multi_map_remove_all(GeeMultiMap * self,gconstpointer key)427 gee_multi_map_remove_all (GeeMultiMap* self,
428                           gconstpointer key)
429 {
430 	g_return_val_if_fail (self != NULL, FALSE);
431 	return GEE_MULTI_MAP_GET_INTERFACE (self)->remove_all (self, key);
432 }
433 
434 /**
435  * Removes all items from this collection.
436  */
437 void
gee_multi_map_clear(GeeMultiMap * self)438 gee_multi_map_clear (GeeMultiMap* self)
439 {
440 	g_return_if_fail (self != NULL);
441 	GEE_MULTI_MAP_GET_INTERFACE (self)->clear (self);
442 }
443 
444 /**
445  * Returns an iterator for this map.
446  *
447  * @return a map iterator
448  */
449 GeeMapIterator*
gee_multi_map_map_iterator(GeeMultiMap * self)450 gee_multi_map_map_iterator (GeeMultiMap* self)
451 {
452 	g_return_val_if_fail (self != NULL, NULL);
453 	return GEE_MULTI_MAP_GET_INTERFACE (self)->map_iterator (self);
454 }
455 
456 gint
gee_multi_map_get_size(GeeMultiMap * self)457 gee_multi_map_get_size (GeeMultiMap* self)
458 {
459 	g_return_val_if_fail (self != NULL, 0);
460 	return GEE_MULTI_MAP_GET_INTERFACE (self)->get_size (self);
461 }
462 
463 gboolean
gee_multi_map_get_read_only(GeeMultiMap * self)464 gee_multi_map_get_read_only (GeeMultiMap* self)
465 {
466 	g_return_val_if_fail (self != NULL, FALSE);
467 	return GEE_MULTI_MAP_GET_INTERFACE (self)->get_read_only (self);
468 }
469 
470 GType
gee_multi_map_get_key_type(GeeMultiMap * self)471 gee_multi_map_get_key_type (GeeMultiMap* self)
472 {
473 	GType result;
474 	g_return_val_if_fail (self != NULL, 0UL);
475 	result = GEE_MULTI_MAP_GET_INTERFACE (self)->get_k_type (self);
476 	return result;
477 }
478 
479 GType
gee_multi_map_get_value_type(GeeMultiMap * self)480 gee_multi_map_get_value_type (GeeMultiMap* self)
481 {
482 	GType result;
483 	g_return_val_if_fail (self != NULL, 0UL);
484 	result = GEE_MULTI_MAP_GET_INTERFACE (self)->get_v_type (self);
485 	return result;
486 }
487 
488 GeeMultiMap*
gee_multi_map_get_read_only_view(GeeMultiMap * self)489 gee_multi_map_get_read_only_view (GeeMultiMap* self)
490 {
491 	g_return_val_if_fail (self != NULL, NULL);
492 	return GEE_MULTI_MAP_GET_INTERFACE (self)->get_read_only_view (self);
493 }
494 
495 static GeeMultiMap*
gee_multi_map_real_get_read_only_view(GeeMultiMap * base)496 gee_multi_map_real_get_read_only_view (GeeMultiMap* base)
497 {
498 	GeeMultiMap* result;
499 	GeeMultiMap* self;
500 	GeeReadOnlyMultiMap* _tmp0_;
501 	self = base;
502 	_tmp0_ = gee_read_only_multi_map_new (GEE_MULTI_MAP_GET_INTERFACE (self)->get_k_type (self), (GBoxedCopyFunc) GEE_MULTI_MAP_GET_INTERFACE (self)->get_k_dup_func (self), (GDestroyNotify) GEE_MULTI_MAP_GET_INTERFACE (self)->get_k_destroy_func (self), GEE_MULTI_MAP_GET_INTERFACE (self)->get_v_type (self), (GBoxedCopyFunc) GEE_MULTI_MAP_GET_INTERFACE (self)->get_v_dup_func (self), (GDestroyNotify) GEE_MULTI_MAP_GET_INTERFACE (self)->get_v_destroy_func (self), self);
503 	result = (GeeMultiMap*) _tmp0_;
504 	return result;
505 }
506 
507 static void
gee_multi_map_default_init(GeeMultiMapIface * iface,gpointer iface_data)508 gee_multi_map_default_init (GeeMultiMapIface * iface,
509                             gpointer iface_data)
510 {
511 	/**
512 	 * The number of key/value pairs in this map.
513 	 */
514 	g_object_interface_install_property (iface, g_param_spec_int ("size", "size", "size", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
515 	/**
516 	 * Specifies whether this collection can change - i.e. wheather {@link set},
517 	 * {@link remove} etc. are legal operations.
518 	 */
519 	g_object_interface_install_property (iface, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
520 	iface->get_read_only_view = gee_multi_map_real_get_read_only_view;
521 }
522 
523 /**
524  * A map with multiple values per key.
525  */
526 GType
gee_multi_map_get_type(void)527 gee_multi_map_get_type (void)
528 {
529 	static volatile gsize gee_multi_map_type_id__volatile = 0;
530 	if (g_once_init_enter (&gee_multi_map_type_id__volatile)) {
531 		static const GTypeInfo g_define_type_info = { sizeof (GeeMultiMapIface), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_multi_map_default_init, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
532 		GType gee_multi_map_type_id;
533 		gee_multi_map_type_id = g_type_register_static (G_TYPE_INTERFACE, "GeeMultiMap", &g_define_type_info, 0);
534 		g_type_interface_add_prerequisite (gee_multi_map_type_id, G_TYPE_OBJECT);
535 		g_once_init_leave (&gee_multi_map_type_id__volatile, gee_multi_map_type_id);
536 	}
537 	return gee_multi_map_type_id__volatile;
538 }
539 
540