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