1 /* abstractmultiset.c generated by valac 0.46.6, the Vala compiler
2 * generated from abstractmultiset.vala, do not modify */
3
4 /* abstractmultiset.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 * Didier 'Ptitjes Villevalois <ptitjes@free.fr>
25 */
26
27 #include <glib-object.h>
28 #include <glib.h>
29
30 #define GEE_TYPE_TRAVERSABLE (gee_traversable_get_type ())
31 #define GEE_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversable))
32 #define GEE_IS_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_TRAVERSABLE))
33 #define GEE_TRAVERSABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversableIface))
34
35 typedef struct _GeeTraversable GeeTraversable;
36 typedef struct _GeeTraversableIface GeeTraversableIface;
37 typedef gboolean (*GeeForallFunc) (gpointer g, gpointer user_data);
38 typedef enum {
39 GEE_TRAVERSABLE_STREAM_YIELD,
40 GEE_TRAVERSABLE_STREAM_CONTINUE,
41 GEE_TRAVERSABLE_STREAM_END,
42 GEE_TRAVERSABLE_STREAM_WAIT
43 } GeeTraversableStream;
44
45 #define GEE_TRAVERSABLE_TYPE_STREAM (gee_traversable_stream_get_type ())
46
47 #define GEE_TYPE_LAZY (gee_lazy_get_type ())
48 #define GEE_LAZY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_LAZY, GeeLazy))
49 #define GEE_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_LAZY, GeeLazyClass))
50 #define GEE_IS_LAZY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_LAZY))
51 #define GEE_IS_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_LAZY))
52 #define GEE_LAZY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_LAZY, GeeLazyClass))
53
54 typedef struct _GeeLazy GeeLazy;
55 typedef struct _GeeLazyClass GeeLazyClass;
56 typedef GeeTraversableStream (*GeeStreamFunc) (GeeTraversableStream state, GeeLazy* g, GeeLazy* * lazy, gpointer user_data);
57
58 #define GEE_TYPE_ITERATOR (gee_iterator_get_type ())
59 #define GEE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERATOR, GeeIterator))
60 #define GEE_IS_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERATOR))
61 #define GEE_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERATOR, GeeIteratorIface))
62
63 typedef struct _GeeIterator GeeIterator;
64 typedef struct _GeeIteratorIface GeeIteratorIface;
65 typedef gpointer (*GeeFoldFunc) (gpointer g, gpointer a, gpointer user_data);
66 typedef gpointer (*GeeMapFunc) (gpointer g, gpointer user_data);
67 typedef gboolean (*GeePredicate) (gconstpointer g, gpointer user_data);
68 typedef GeeIterator* (*GeeFlatMapFunc) (gpointer g, gpointer user_data);
69
70 #define GEE_TYPE_ITERABLE (gee_iterable_get_type ())
71 #define GEE_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERABLE, GeeIterable))
72 #define GEE_IS_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERABLE))
73 #define GEE_ITERABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERABLE, GeeIterableIface))
74
75 typedef struct _GeeIterable GeeIterable;
76 typedef struct _GeeIterableIface GeeIterableIface;
77
78 #define GEE_TYPE_COLLECTION (gee_collection_get_type ())
79 #define GEE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_COLLECTION, GeeCollection))
80 #define GEE_IS_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_COLLECTION))
81 #define GEE_COLLECTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_COLLECTION, GeeCollectionIface))
82
83 typedef struct _GeeCollection GeeCollection;
84 typedef struct _GeeCollectionIface GeeCollectionIface;
85
86 #define GEE_TYPE_ABSTRACT_COLLECTION (gee_abstract_collection_get_type ())
87 #define GEE_ABSTRACT_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection))
88 #define GEE_ABSTRACT_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollectionClass))
89 #define GEE_IS_ABSTRACT_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_COLLECTION))
90 #define GEE_IS_ABSTRACT_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_COLLECTION))
91 #define GEE_ABSTRACT_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollectionClass))
92
93 typedef struct _GeeAbstractCollection GeeAbstractCollection;
94 typedef struct _GeeAbstractCollectionClass GeeAbstractCollectionClass;
95 typedef struct _GeeAbstractCollectionPrivate GeeAbstractCollectionPrivate;
96
97 #define GEE_TYPE_MULTI_SET (gee_multi_set_get_type ())
98 #define GEE_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_MULTI_SET, GeeMultiSet))
99 #define GEE_IS_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_MULTI_SET))
100 #define GEE_MULTI_SET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_MULTI_SET, GeeMultiSetIface))
101
102 typedef struct _GeeMultiSet GeeMultiSet;
103 typedef struct _GeeMultiSetIface GeeMultiSetIface;
104
105 #define GEE_TYPE_ABSTRACT_MULTI_SET (gee_abstract_multi_set_get_type ())
106 #define GEE_ABSTRACT_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_MULTI_SET, GeeAbstractMultiSet))
107 #define GEE_ABSTRACT_MULTI_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_MULTI_SET, GeeAbstractMultiSetClass))
108 #define GEE_IS_ABSTRACT_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_MULTI_SET))
109 #define GEE_IS_ABSTRACT_MULTI_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_MULTI_SET))
110 #define GEE_ABSTRACT_MULTI_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_MULTI_SET, GeeAbstractMultiSetClass))
111
112 typedef struct _GeeAbstractMultiSet GeeAbstractMultiSet;
113 typedef struct _GeeAbstractMultiSetClass GeeAbstractMultiSetClass;
114 typedef struct _GeeAbstractMultiSetPrivate GeeAbstractMultiSetPrivate;
115
116 #define GEE_TYPE_MAP (gee_map_get_type ())
117 #define GEE_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_MAP, GeeMap))
118 #define GEE_IS_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_MAP))
119 #define GEE_MAP_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_MAP, GeeMapIface))
120
121 typedef struct _GeeMap GeeMap;
122 typedef struct _GeeMapIface GeeMapIface;
123
124 #define GEE_TYPE_MAP_ITERATOR (gee_map_iterator_get_type ())
125 #define GEE_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_MAP_ITERATOR, GeeMapIterator))
126 #define GEE_IS_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_MAP_ITERATOR))
127 #define GEE_MAP_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_MAP_ITERATOR, GeeMapIteratorIface))
128
129 typedef struct _GeeMapIterator GeeMapIterator;
130 typedef struct _GeeMapIteratorIface GeeMapIteratorIface;
131 typedef gpointer (*GeeFoldMapFunc) (gconstpointer k, gconstpointer v, gpointer a, gpointer user_data);
132 typedef gboolean (*GeeForallMapFunc) (gconstpointer k, gconstpointer v, gpointer user_data);
133
134 #define GEE_TYPE_SET (gee_set_get_type ())
135 #define GEE_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_SET, GeeSet))
136 #define GEE_IS_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_SET))
137 #define GEE_SET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_SET, GeeSetIface))
138
139 typedef struct _GeeSet GeeSet;
140 typedef struct _GeeSetIface GeeSetIface;
141
142 #define GEE_MAP_TYPE_ENTRY (gee_map_entry_get_type ())
143 #define GEE_MAP_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_MAP_TYPE_ENTRY, GeeMapEntry))
144 #define GEE_MAP_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_MAP_TYPE_ENTRY, GeeMapEntryClass))
145 #define GEE_MAP_IS_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_MAP_TYPE_ENTRY))
146 #define GEE_MAP_IS_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_MAP_TYPE_ENTRY))
147 #define GEE_MAP_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_MAP_TYPE_ENTRY, GeeMapEntryClass))
148
149 typedef struct _GeeMapEntry GeeMapEntry;
150 typedef struct _GeeMapEntryClass GeeMapEntryClass;
151 enum {
152 GEE_ABSTRACT_MULTI_SET_0_PROPERTY,
153 GEE_ABSTRACT_MULTI_SET_G_TYPE,
154 GEE_ABSTRACT_MULTI_SET_G_DUP_FUNC,
155 GEE_ABSTRACT_MULTI_SET_G_DESTROY_FUNC,
156 GEE_ABSTRACT_MULTI_SET_SIZE_PROPERTY,
157 GEE_ABSTRACT_MULTI_SET_READ_ONLY_PROPERTY,
158 GEE_ABSTRACT_MULTI_SET_NUM_PROPERTIES
159 };
160 static GParamSpec* gee_abstract_multi_set_properties[GEE_ABSTRACT_MULTI_SET_NUM_PROPERTIES];
161 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
162
163 #define GEE_ABSTRACT_MULTI_SET_TYPE_ITERATOR (gee_abstract_multi_set_iterator_get_type ())
164 #define GEE_ABSTRACT_MULTI_SET_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_ABSTRACT_MULTI_SET_TYPE_ITERATOR, GeeAbstractMultiSetIterator))
165 #define GEE_ABSTRACT_MULTI_SET_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_ABSTRACT_MULTI_SET_TYPE_ITERATOR, GeeAbstractMultiSetIteratorClass))
166 #define GEE_ABSTRACT_MULTI_SET_IS_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_ABSTRACT_MULTI_SET_TYPE_ITERATOR))
167 #define GEE_ABSTRACT_MULTI_SET_IS_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_ABSTRACT_MULTI_SET_TYPE_ITERATOR))
168 #define GEE_ABSTRACT_MULTI_SET_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_ABSTRACT_MULTI_SET_TYPE_ITERATOR, GeeAbstractMultiSetIteratorClass))
169
170 typedef struct _GeeAbstractMultiSetIterator GeeAbstractMultiSetIterator;
171 typedef struct _GeeAbstractMultiSetIteratorClass GeeAbstractMultiSetIteratorClass;
172
173 #define GEE_TYPE_READ_ONLY_COLLECTION (gee_read_only_collection_get_type ())
174 #define GEE_READ_ONLY_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_READ_ONLY_COLLECTION, GeeReadOnlyCollection))
175 #define GEE_READ_ONLY_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_READ_ONLY_COLLECTION, GeeReadOnlyCollectionClass))
176 #define GEE_IS_READ_ONLY_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_READ_ONLY_COLLECTION))
177 #define GEE_IS_READ_ONLY_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_READ_ONLY_COLLECTION))
178 #define GEE_READ_ONLY_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_READ_ONLY_COLLECTION, GeeReadOnlyCollectionClass))
179
180 typedef struct _GeeReadOnlyCollection GeeReadOnlyCollection;
181 typedef struct _GeeReadOnlyCollectionClass GeeReadOnlyCollectionClass;
182
183 #define GEE_TYPE_READ_ONLY_MULTI_SET (gee_read_only_multi_set_get_type ())
184 #define GEE_READ_ONLY_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_READ_ONLY_MULTI_SET, GeeReadOnlyMultiSet))
185 #define GEE_READ_ONLY_MULTI_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_READ_ONLY_MULTI_SET, GeeReadOnlyMultiSetClass))
186 #define GEE_IS_READ_ONLY_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_READ_ONLY_MULTI_SET))
187 #define GEE_IS_READ_ONLY_MULTI_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_READ_ONLY_MULTI_SET))
188 #define GEE_READ_ONLY_MULTI_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_READ_ONLY_MULTI_SET, GeeReadOnlyMultiSetClass))
189
190 typedef struct _GeeReadOnlyMultiSet GeeReadOnlyMultiSet;
191 typedef struct _GeeReadOnlyMultiSetClass GeeReadOnlyMultiSetClass;
192 typedef struct _GeeAbstractMultiSetIteratorPrivate GeeAbstractMultiSetIteratorPrivate;
193 enum {
194 GEE_ABSTRACT_MULTI_SET_ITERATOR_0_PROPERTY,
195 GEE_ABSTRACT_MULTI_SET_ITERATOR_G_TYPE,
196 GEE_ABSTRACT_MULTI_SET_ITERATOR_G_DUP_FUNC,
197 GEE_ABSTRACT_MULTI_SET_ITERATOR_G_DESTROY_FUNC,
198 GEE_ABSTRACT_MULTI_SET_ITERATOR_READ_ONLY_PROPERTY,
199 GEE_ABSTRACT_MULTI_SET_ITERATOR_VALID_PROPERTY,
200 GEE_ABSTRACT_MULTI_SET_ITERATOR_NUM_PROPERTIES
201 };
202 static GParamSpec* gee_abstract_multi_set_iterator_properties[GEE_ABSTRACT_MULTI_SET_ITERATOR_NUM_PROPERTIES];
203 #define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
204 #define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
205 #define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
206 #define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
207
208 struct _GeeIteratorIface {
209 GTypeInterface parent_iface;
210 gboolean (*next) (GeeIterator* self);
211 gboolean (*has_next) (GeeIterator* self);
212 gpointer (*get) (GeeIterator* self);
213 void (*remove) (GeeIterator* self);
214 gboolean (*get_valid) (GeeIterator* self);
215 gboolean (*get_read_only) (GeeIterator* self);
216 };
217
218 struct _GeeTraversableIface {
219 GTypeInterface parent_iface;
220 GType (*get_g_type) (GeeTraversable* self);
221 GBoxedCopyFunc (*get_g_dup_func) (GeeTraversable* self);
222 GDestroyNotify (*get_g_destroy_func) (GeeTraversable* self);
223 gboolean (*foreach) (GeeTraversable* self, GeeForallFunc f, gpointer f_target);
224 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);
225 gpointer (*fold) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, gpointer f_target, gpointer seed);
226 GeeIterator* (*map) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeMapFunc f, gpointer f_target);
227 GeeIterator* (*scan) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, gpointer f_target, gpointer seed);
228 GeeIterator* (*filter) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
229 GeeIterator* (*chop) (GeeTraversable* self, gint offset, gint length);
230 GType (*get_element_type) (GeeTraversable* self);
231 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);
232 GeeIterator** (*tee) (GeeTraversable* self, guint forks, gint* result_length1);
233 gpointer (*first_match) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
234 gboolean (*any_match) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
235 gboolean (*all_match) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
236 gpointer (*max) (GeeTraversable* self, GCompareDataFunc compare, gpointer compare_target, GDestroyNotify compare_target_destroy_notify);
237 gpointer (*min) (GeeTraversable* self, GCompareDataFunc compare, gpointer compare_target, GDestroyNotify compare_target_destroy_notify);
238 GeeIterator* (*order_by) (GeeTraversable* self, GCompareDataFunc compare, gpointer compare_target, GDestroyNotify compare_target_destroy_notify);
239 };
240
241 struct _GeeIterableIface {
242 GTypeInterface parent_iface;
243 GType (*get_g_type) (GeeIterable* self);
244 GBoxedCopyFunc (*get_g_dup_func) (GeeIterable* self);
245 GDestroyNotify (*get_g_destroy_func) (GeeIterable* self);
246 GeeIterator* (*iterator) (GeeIterable* self);
247 };
248
249 struct _GeeCollectionIface {
250 GTypeInterface parent_iface;
251 GType (*get_g_type) (GeeCollection* self);
252 GBoxedCopyFunc (*get_g_dup_func) (GeeCollection* self);
253 GDestroyNotify (*get_g_destroy_func) (GeeCollection* self);
254 gboolean (*contains) (GeeCollection* self, gconstpointer item);
255 gboolean (*add) (GeeCollection* self, gconstpointer item);
256 gboolean (*remove) (GeeCollection* self, gconstpointer item);
257 void (*clear) (GeeCollection* self);
258 gboolean (*add_all) (GeeCollection* self, GeeCollection* collection);
259 gboolean (*contains_all) (GeeCollection* self, GeeCollection* collection);
260 gboolean (*remove_all) (GeeCollection* self, GeeCollection* collection);
261 gboolean (*retain_all) (GeeCollection* self, GeeCollection* collection);
262 gpointer* (*to_array) (GeeCollection* self, gint* result_length1);
263 gint (*get_size) (GeeCollection* self);
264 gboolean (*get_is_empty) (GeeCollection* self);
265 gboolean (*get_read_only) (GeeCollection* self);
266 GeeCollection* (*get_read_only_view) (GeeCollection* self);
267 gboolean (*add_all_array) (GeeCollection* self, gpointer* array, gint array_length1);
268 gboolean (*contains_all_array) (GeeCollection* self, gpointer* array, gint array_length1);
269 gboolean (*remove_all_array) (GeeCollection* self, gpointer* array, gint array_length1);
270 gboolean (*add_all_iterator) (GeeCollection* self, GeeIterator* iter);
271 gboolean (*contains_all_iterator) (GeeCollection* self, GeeIterator* iter);
272 gboolean (*remove_all_iterator) (GeeCollection* self, GeeIterator* iter);
273 };
274
275 struct _GeeAbstractCollection {
276 GObject parent_instance;
277 GeeAbstractCollectionPrivate * priv;
278 };
279
280 struct _GeeAbstractCollectionClass {
281 GObjectClass parent_class;
282 gboolean (*contains) (GeeAbstractCollection* self, gconstpointer item);
283 gboolean (*add) (GeeAbstractCollection* self, gconstpointer item);
284 gboolean (*remove) (GeeAbstractCollection* self, gconstpointer item);
285 void (*clear) (GeeAbstractCollection* self);
286 GeeIterator* (*iterator) (GeeAbstractCollection* self);
287 gboolean (*foreach) (GeeAbstractCollection* self, GeeForallFunc f, gpointer f_target);
288 void (*reserved0) (GeeAbstractCollection* self);
289 void (*reserved1) (GeeAbstractCollection* self);
290 void (*reserved2) (GeeAbstractCollection* self);
291 void (*reserved3) (GeeAbstractCollection* self);
292 void (*reserved4) (GeeAbstractCollection* self);
293 void (*reserved5) (GeeAbstractCollection* self);
294 void (*reserved6) (GeeAbstractCollection* self);
295 void (*reserved7) (GeeAbstractCollection* self);
296 void (*reserved8) (GeeAbstractCollection* self);
297 void (*reserved9) (GeeAbstractCollection* self);
298 gint (*get_size) (GeeAbstractCollection* self);
299 gboolean (*get_read_only) (GeeAbstractCollection* self);
300 GeeCollection* (*get_read_only_view) (GeeAbstractCollection* self);
301 };
302
303 struct _GeeMultiSetIface {
304 GTypeInterface parent_iface;
305 GType (*get_g_type) (GeeMultiSet* self);
306 GBoxedCopyFunc (*get_g_dup_func) (GeeMultiSet* self);
307 GDestroyNotify (*get_g_destroy_func) (GeeMultiSet* self);
308 gint (*count) (GeeMultiSet* self, gconstpointer item);
309 GeeMultiSet* (*get_read_only_view) (GeeMultiSet* self);
310 };
311
312 struct _GeeMapIteratorIface {
313 GTypeInterface parent_iface;
314 GType (*get_k_type) (GeeMapIterator* self);
315 GBoxedCopyFunc (*get_k_dup_func) (GeeMapIterator* self);
316 GDestroyNotify (*get_k_destroy_func) (GeeMapIterator* self);
317 GType (*get_v_type) (GeeMapIterator* self);
318 GBoxedCopyFunc (*get_v_dup_func) (GeeMapIterator* self);
319 GDestroyNotify (*get_v_destroy_func) (GeeMapIterator* self);
320 gboolean (*next) (GeeMapIterator* self);
321 gboolean (*has_next) (GeeMapIterator* self);
322 gpointer (*get_key) (GeeMapIterator* self);
323 gpointer (*get_value) (GeeMapIterator* self);
324 void (*set_value) (GeeMapIterator* self, gconstpointer value);
325 void (*unset) (GeeMapIterator* self);
326 gpointer (*fold) (GeeMapIterator* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldMapFunc f, gpointer f_target, gpointer seed);
327 gboolean (*foreach) (GeeMapIterator* self, GeeForallMapFunc f, gpointer f_target);
328 gboolean (*get_valid) (GeeMapIterator* self);
329 gboolean (*get_mutable) (GeeMapIterator* self);
330 gboolean (*get_read_only) (GeeMapIterator* self);
331 };
332
333 struct _GeeSetIface {
334 GTypeInterface parent_iface;
335 GType (*get_g_type) (GeeSet* self);
336 GBoxedCopyFunc (*get_g_dup_func) (GeeSet* self);
337 GDestroyNotify (*get_g_destroy_func) (GeeSet* self);
338 GeeSet* (*get_read_only_view) (GeeSet* self);
339 };
340
341 struct _GeeMapIface {
342 GTypeInterface parent_iface;
343 GType (*get_k_type) (GeeMap* self);
344 GBoxedCopyFunc (*get_k_dup_func) (GeeMap* self);
345 GDestroyNotify (*get_k_destroy_func) (GeeMap* self);
346 GType (*get_v_type) (GeeMap* self);
347 GBoxedCopyFunc (*get_v_dup_func) (GeeMap* self);
348 GDestroyNotify (*get_v_destroy_func) (GeeMap* self);
349 gboolean (*has_key) (GeeMap* self, gconstpointer key);
350 gboolean (*has) (GeeMap* self, gconstpointer key, gconstpointer value);
351 gpointer (*get) (GeeMap* self, gconstpointer key);
352 void (*set) (GeeMap* self, gconstpointer key, gconstpointer value);
353 gboolean (*unset) (GeeMap* self, gconstpointer key, gpointer* value);
354 void (*clear) (GeeMap* self);
355 GeeMapIterator* (*map_iterator) (GeeMap* self);
356 void (*set_all) (GeeMap* self, GeeMap* map);
357 gboolean (*unset_all) (GeeMap* self, GeeMap* map);
358 gboolean (*has_all) (GeeMap* self, GeeMap* map);
359 gint (*get_size) (GeeMap* self);
360 gboolean (*get_is_empty) (GeeMap* self);
361 gboolean (*get_read_only) (GeeMap* self);
362 GeeSet* (*get_keys) (GeeMap* self);
363 GeeCollection* (*get_values) (GeeMap* self);
364 GeeSet* (*get_entries) (GeeMap* self);
365 GeeMap* (*get_read_only_view) (GeeMap* self);
366 };
367
368 struct _GeeAbstractMultiSet {
369 GeeAbstractCollection parent_instance;
370 GeeAbstractMultiSetPrivate * priv;
371 GeeMap* _storage_map;
372 };
373
374 struct _GeeAbstractMultiSetClass {
375 GeeAbstractCollectionClass parent_class;
376 void (*reserved0) (GeeAbstractMultiSet* self);
377 void (*reserved1) (GeeAbstractMultiSet* self);
378 void (*reserved2) (GeeAbstractMultiSet* self);
379 void (*reserved3) (GeeAbstractMultiSet* self);
380 void (*reserved4) (GeeAbstractMultiSet* self);
381 void (*reserved5) (GeeAbstractMultiSet* self);
382 void (*reserved6) (GeeAbstractMultiSet* self);
383 void (*reserved7) (GeeAbstractMultiSet* self);
384 void (*reserved8) (GeeAbstractMultiSet* self);
385 GeeMultiSet* (*get_read_only_view) (GeeAbstractMultiSet* self);
386 };
387
388 struct _GeeAbstractMultiSetPrivate {
389 GType g_type;
390 GBoxedCopyFunc g_dup_func;
391 GDestroyNotify g_destroy_func;
392 gint _nitems;
393 GWeakRef _read_only_view;
394 };
395
396 struct _GeeAbstractMultiSetIterator {
397 GObject parent_instance;
398 GeeAbstractMultiSetIteratorPrivate * priv;
399 };
400
401 struct _GeeAbstractMultiSetIteratorClass {
402 GObjectClass parent_class;
403 };
404
405 struct _GeeAbstractMultiSetIteratorPrivate {
406 GType g_type;
407 GBoxedCopyFunc g_dup_func;
408 GDestroyNotify g_destroy_func;
409 GeeAbstractMultiSet* _set;
410 GeeMapIterator* _iter;
411 gint _pending;
412 gboolean _removed;
413 };
414
415 static gint GeeAbstractMultiSet_private_offset;
416 static gpointer gee_abstract_multi_set_parent_class = NULL;
417 static gint GeeAbstractMultiSetIterator_private_offset;
418 static gpointer gee_abstract_multi_set_iterator_parent_class = NULL;
419 static GeeTraversableIface * gee_abstract_multi_set_iterator_gee_traversable_parent_iface = NULL;
420 static GeeIteratorIface * gee_abstract_multi_set_iterator_gee_iterator_parent_iface = NULL;
421 static GeeMultiSetIface * gee_abstract_multi_set_gee_multi_set_parent_iface = NULL;
422
423 GType gee_traversable_stream_get_type (void) G_GNUC_CONST;
424 gpointer gee_lazy_ref (gpointer instance);
425 void gee_lazy_unref (gpointer instance);
426 GParamSpec* gee_param_spec_lazy (const gchar* name,
427 const gchar* nick,
428 const gchar* blurb,
429 GType object_type,
430 GParamFlags flags);
431 void gee_value_set_lazy (GValue* value,
432 gpointer v_object);
433 void gee_value_take_lazy (GValue* value,
434 gpointer v_object);
435 gpointer gee_value_get_lazy (const GValue* value);
436 GType gee_lazy_get_type (void) G_GNUC_CONST;
437 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeLazy, gee_lazy_unref)
438 GType gee_iterator_get_type (void) G_GNUC_CONST;
439 GType gee_traversable_get_type (void) G_GNUC_CONST;
440 GType gee_iterable_get_type (void) G_GNUC_CONST;
441 GType gee_collection_get_type (void) G_GNUC_CONST;
442 GType gee_abstract_collection_get_type (void) G_GNUC_CONST;
443 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeAbstractCollection, g_object_unref)
444 GType gee_multi_set_get_type (void) G_GNUC_CONST;
445 GType gee_abstract_multi_set_get_type (void) G_GNUC_CONST;
446 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeAbstractMultiSet, g_object_unref)
447 GType gee_map_iterator_get_type (void) G_GNUC_CONST;
448 GType gee_set_get_type (void) G_GNUC_CONST;
449 GType gee_map_entry_get_type (void) G_GNUC_CONST;
450 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeMapEntry, g_object_unref)
451 GType gee_map_get_type (void) G_GNUC_CONST;
452 GeeAbstractMultiSet* gee_abstract_multi_set_construct (GType object_type,
453 GType g_type,
454 GBoxedCopyFunc g_dup_func,
455 GDestroyNotify g_destroy_func,
456 GeeMap* storage_map);
457 GeeAbstractCollection* gee_abstract_collection_construct (GType object_type,
458 GType g_type,
459 GBoxedCopyFunc g_dup_func,
460 GDestroyNotify g_destroy_func);
461 static gint gee_abstract_multi_set_real_count (GeeMultiSet* base,
462 gconstpointer item);
463 gboolean gee_map_has_key (GeeMap* self,
464 gconstpointer key);
465 gpointer gee_map_get (GeeMap* self,
466 gconstpointer key);
467 static gboolean gee_abstract_multi_set_real_contains (GeeAbstractCollection* base,
468 gconstpointer item);
469 static GeeIterator* gee_abstract_multi_set_real_iterator (GeeAbstractCollection* base);
470 static GeeAbstractMultiSetIterator* gee_abstract_multi_set_iterator_new (GType g_type,
471 GBoxedCopyFunc g_dup_func,
472 GDestroyNotify g_destroy_func,
473 GeeAbstractMultiSet* set);
474 static GeeAbstractMultiSetIterator* gee_abstract_multi_set_iterator_construct (GType object_type,
475 GType g_type,
476 GBoxedCopyFunc g_dup_func,
477 GDestroyNotify g_destroy_func,
478 GeeAbstractMultiSet* set);
479 static GType gee_abstract_multi_set_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
480 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeAbstractMultiSetIterator, g_object_unref)
481 static gboolean gee_abstract_multi_set_real_add (GeeAbstractCollection* base,
482 gconstpointer item);
483 void gee_map_set (GeeMap* self,
484 gconstpointer key,
485 gconstpointer value);
486 static gboolean gee_abstract_multi_set_real_remove (GeeAbstractCollection* base,
487 gconstpointer item);
488 gboolean gee_map_unset (GeeMap* self,
489 gconstpointer key,
490 gpointer* value);
491 static void gee_abstract_multi_set_real_clear (GeeAbstractCollection* base);
492 void gee_map_clear (GeeMap* self);
493 G_GNUC_INTERNAL void gee_abstract_multi_set_reserved0 (GeeAbstractMultiSet* self);
494 static void gee_abstract_multi_set_real_reserved0 (GeeAbstractMultiSet* self);
495 G_GNUC_INTERNAL void gee_abstract_multi_set_reserved1 (GeeAbstractMultiSet* self);
496 static void gee_abstract_multi_set_real_reserved1 (GeeAbstractMultiSet* self);
497 G_GNUC_INTERNAL void gee_abstract_multi_set_reserved2 (GeeAbstractMultiSet* self);
498 static void gee_abstract_multi_set_real_reserved2 (GeeAbstractMultiSet* self);
499 G_GNUC_INTERNAL void gee_abstract_multi_set_reserved3 (GeeAbstractMultiSet* self);
500 static void gee_abstract_multi_set_real_reserved3 (GeeAbstractMultiSet* self);
501 G_GNUC_INTERNAL void gee_abstract_multi_set_reserved4 (GeeAbstractMultiSet* self);
502 static void gee_abstract_multi_set_real_reserved4 (GeeAbstractMultiSet* self);
503 G_GNUC_INTERNAL void gee_abstract_multi_set_reserved5 (GeeAbstractMultiSet* self);
504 static void gee_abstract_multi_set_real_reserved5 (GeeAbstractMultiSet* self);
505 G_GNUC_INTERNAL void gee_abstract_multi_set_reserved6 (GeeAbstractMultiSet* self);
506 static void gee_abstract_multi_set_real_reserved6 (GeeAbstractMultiSet* self);
507 G_GNUC_INTERNAL void gee_abstract_multi_set_reserved7 (GeeAbstractMultiSet* self);
508 static void gee_abstract_multi_set_real_reserved7 (GeeAbstractMultiSet* self);
509 G_GNUC_INTERNAL void gee_abstract_multi_set_reserved8 (GeeAbstractMultiSet* self);
510 static void gee_abstract_multi_set_real_reserved8 (GeeAbstractMultiSet* self);
511 GeeMultiSet* gee_abstract_multi_set_get_read_only_view (GeeAbstractMultiSet* self);
512 G_GNUC_INTERNAL GeeReadOnlyMultiSet* gee_read_only_multi_set_new (GType g_type,
513 GBoxedCopyFunc g_dup_func,
514 GDestroyNotify g_destroy_func,
515 GeeMultiSet* multiset);
516 G_GNUC_INTERNAL GeeReadOnlyMultiSet* gee_read_only_multi_set_construct (GType object_type,
517 GType g_type,
518 GBoxedCopyFunc g_dup_func,
519 GDestroyNotify g_destroy_func,
520 GeeMultiSet* multiset);
521 G_GNUC_INTERNAL GType gee_read_only_collection_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
522 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeReadOnlyCollection, g_object_unref)
523 G_GNUC_INTERNAL GType gee_read_only_multi_set_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
524 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeReadOnlyMultiSet, g_object_unref)
525 static GObject * gee_abstract_multi_set_constructor (GType type,
526 guint n_construct_properties,
527 GObjectConstructParam * construct_properties);
528 GeeMapIterator* gee_map_map_iterator (GeeMap* self);
529 static gboolean gee_abstract_multi_set_iterator_real_next (GeeIterator* base);
530 gboolean gee_map_iterator_next (GeeMapIterator* self);
531 gpointer gee_map_iterator_get_value (GeeMapIterator* self);
532 static gboolean gee_abstract_multi_set_iterator_real_has_next (GeeIterator* base);
533 gboolean gee_map_iterator_has_next (GeeMapIterator* self);
534 static gpointer gee_abstract_multi_set_iterator_real_get (GeeIterator* base);
535 gpointer gee_map_iterator_get_key (GeeMapIterator* self);
536 static void gee_abstract_multi_set_iterator_real_remove (GeeIterator* base);
537 void gee_map_iterator_set_value (GeeMapIterator* self,
538 gconstpointer value);
539 void gee_map_iterator_unset (GeeMapIterator* self);
540 static gboolean gee_abstract_multi_set_iterator_real_foreach (GeeTraversable* base,
541 GeeForallFunc f,
542 gpointer f_target);
543 gboolean gee_map_iterator_get_valid (GeeMapIterator* self);
544 static void gee_abstract_multi_set_iterator_finalize (GObject * obj);
545 gboolean gee_iterator_get_read_only (GeeIterator* self);
546 gboolean gee_iterator_get_valid (GeeIterator* self);
547 static void _vala_gee_abstract_multi_set_iterator_get_property (GObject * object,
548 guint property_id,
549 GValue * value,
550 GParamSpec * pspec);
551 static void _vala_gee_abstract_multi_set_iterator_set_property (GObject * object,
552 guint property_id,
553 const GValue * value,
554 GParamSpec * pspec);
555 static void gee_abstract_multi_set_finalize (GObject * obj);
556 gint gee_abstract_collection_get_size (GeeAbstractCollection* self);
557 gboolean gee_abstract_collection_get_read_only (GeeAbstractCollection* self);
558 static void _vala_gee_abstract_multi_set_get_property (GObject * object,
559 guint property_id,
560 GValue * value,
561 GParamSpec * pspec);
562 static void _vala_gee_abstract_multi_set_set_property (GObject * object,
563 guint property_id,
564 const GValue * value,
565 GParamSpec * pspec);
566
567 static inline gpointer
gee_abstract_multi_set_get_instance_private(GeeAbstractMultiSet * self)568 gee_abstract_multi_set_get_instance_private (GeeAbstractMultiSet* self)
569 {
570 return G_STRUCT_MEMBER_P (self, GeeAbstractMultiSet_private_offset);
571 }
572
573 /**
574 * Constructs a new, empty abstract multi set.
575 */
576 static gpointer
_g_object_ref0(gpointer self)577 _g_object_ref0 (gpointer self)
578 {
579 return self ? g_object_ref (self) : NULL;
580 }
581
582 GeeAbstractMultiSet*
gee_abstract_multi_set_construct(GType object_type,GType g_type,GBoxedCopyFunc g_dup_func,GDestroyNotify g_destroy_func,GeeMap * storage_map)583 gee_abstract_multi_set_construct (GType object_type,
584 GType g_type,
585 GBoxedCopyFunc g_dup_func,
586 GDestroyNotify g_destroy_func,
587 GeeMap* storage_map)
588 {
589 GeeAbstractMultiSet * self = NULL;
590 GeeMap* _tmp0_;
591 g_return_val_if_fail (storage_map != NULL, NULL);
592 self = (GeeAbstractMultiSet*) gee_abstract_collection_construct (object_type, g_type, (GBoxedCopyFunc) g_dup_func, (GDestroyNotify) g_destroy_func);
593 self->priv->g_type = g_type;
594 self->priv->g_dup_func = g_dup_func;
595 self->priv->g_destroy_func = g_destroy_func;
596 _tmp0_ = _g_object_ref0 (storage_map);
597 _g_object_unref0 (self->_storage_map);
598 self->_storage_map = _tmp0_;
599 return self;
600 }
601
602 static gint
gee_abstract_multi_set_real_count(GeeMultiSet * base,gconstpointer item)603 gee_abstract_multi_set_real_count (GeeMultiSet* base,
604 gconstpointer item)
605 {
606 GeeAbstractMultiSet * self;
607 gint _result_ = 0;
608 GeeMap* _tmp0_;
609 gint result = 0;
610 self = (GeeAbstractMultiSet*) base;
611 _result_ = 0;
612 _tmp0_ = self->_storage_map;
613 if (gee_map_has_key (_tmp0_, item)) {
614 GeeMap* _tmp1_;
615 gpointer _tmp2_;
616 _tmp1_ = self->_storage_map;
617 _tmp2_ = gee_map_get (_tmp1_, item);
618 _result_ = (gint) ((gintptr) _tmp2_);
619 }
620 result = _result_;
621 return result;
622 }
623
624 static gboolean
gee_abstract_multi_set_real_contains(GeeAbstractCollection * base,gconstpointer item)625 gee_abstract_multi_set_real_contains (GeeAbstractCollection* base,
626 gconstpointer item)
627 {
628 GeeAbstractMultiSet * self;
629 GeeMap* _tmp0_;
630 gboolean result = FALSE;
631 self = (GeeAbstractMultiSet*) base;
632 _tmp0_ = self->_storage_map;
633 result = gee_map_has_key (_tmp0_, item);
634 return result;
635 }
636
637 static GeeIterator*
gee_abstract_multi_set_real_iterator(GeeAbstractCollection * base)638 gee_abstract_multi_set_real_iterator (GeeAbstractCollection* base)
639 {
640 GeeAbstractMultiSet * self;
641 GeeAbstractMultiSetIterator* _tmp0_;
642 GeeIterator* result = NULL;
643 self = (GeeAbstractMultiSet*) base;
644 _tmp0_ = gee_abstract_multi_set_iterator_new (self->priv->g_type, (GBoxedCopyFunc) self->priv->g_dup_func, (GDestroyNotify) self->priv->g_destroy_func, self);
645 result = (GeeIterator*) _tmp0_;
646 return result;
647 }
648
649 static gboolean
gee_abstract_multi_set_real_add(GeeAbstractCollection * base,gconstpointer item)650 gee_abstract_multi_set_real_add (GeeAbstractCollection* base,
651 gconstpointer item)
652 {
653 GeeAbstractMultiSet * self;
654 GeeMap* _tmp0_;
655 gint _tmp5_;
656 gboolean result = FALSE;
657 self = (GeeAbstractMultiSet*) base;
658 _tmp0_ = self->_storage_map;
659 if (gee_map_has_key (_tmp0_, item)) {
660 gint current_count = 0;
661 GeeMap* _tmp1_;
662 gpointer _tmp2_;
663 GeeMap* _tmp3_;
664 _tmp1_ = self->_storage_map;
665 _tmp2_ = gee_map_get (_tmp1_, item);
666 current_count = (gint) ((gintptr) _tmp2_);
667 _tmp3_ = self->_storage_map;
668 gee_map_set (_tmp3_, item, (gpointer) ((gintptr) (current_count + 1)));
669 } else {
670 GeeMap* _tmp4_;
671 _tmp4_ = self->_storage_map;
672 gee_map_set (_tmp4_, item, (gpointer) ((gintptr) 1));
673 }
674 _tmp5_ = self->priv->_nitems;
675 self->priv->_nitems = _tmp5_ + 1;
676 result = TRUE;
677 return result;
678 }
679
680 static gboolean
gee_abstract_multi_set_real_remove(GeeAbstractCollection * base,gconstpointer item)681 gee_abstract_multi_set_real_remove (GeeAbstractCollection* base,
682 gconstpointer item)
683 {
684 GeeAbstractMultiSet * self;
685 gboolean _tmp0_ = FALSE;
686 gboolean result = FALSE;
687 self = (GeeAbstractMultiSet*) base;
688 if (self->priv->_nitems > 0) {
689 GeeMap* _tmp1_;
690 _tmp1_ = self->_storage_map;
691 _tmp0_ = gee_map_has_key (_tmp1_, item);
692 } else {
693 _tmp0_ = FALSE;
694 }
695 if (_tmp0_) {
696 gint current_count = 0;
697 GeeMap* _tmp2_;
698 gpointer _tmp3_;
699 gint _tmp6_;
700 _tmp2_ = self->_storage_map;
701 _tmp3_ = gee_map_get (_tmp2_, item);
702 current_count = (gint) ((gintptr) _tmp3_);
703 if (current_count <= 1) {
704 GeeMap* _tmp4_;
705 _tmp4_ = self->_storage_map;
706 gee_map_unset (_tmp4_, item, NULL);
707 } else {
708 GeeMap* _tmp5_;
709 _tmp5_ = self->_storage_map;
710 gee_map_set (_tmp5_, item, (gpointer) ((gintptr) (current_count - 1)));
711 }
712 _tmp6_ = self->priv->_nitems;
713 self->priv->_nitems = _tmp6_ - 1;
714 result = TRUE;
715 return result;
716 }
717 result = FALSE;
718 return result;
719 }
720
721 static void
gee_abstract_multi_set_real_clear(GeeAbstractCollection * base)722 gee_abstract_multi_set_real_clear (GeeAbstractCollection* base)
723 {
724 GeeAbstractMultiSet * self;
725 GeeMap* _tmp0_;
726 self = (GeeAbstractMultiSet*) base;
727 _tmp0_ = self->_storage_map;
728 gee_map_clear (_tmp0_);
729 self->priv->_nitems = 0;
730 }
731
732 static void
gee_abstract_multi_set_real_reserved0(GeeAbstractMultiSet * self)733 gee_abstract_multi_set_real_reserved0 (GeeAbstractMultiSet* self)
734 {
735 }
736
737 void
gee_abstract_multi_set_reserved0(GeeAbstractMultiSet * self)738 gee_abstract_multi_set_reserved0 (GeeAbstractMultiSet* self)
739 {
740 g_return_if_fail (self != NULL);
741 GEE_ABSTRACT_MULTI_SET_GET_CLASS (self)->reserved0 (self);
742 }
743
744 static void
gee_abstract_multi_set_real_reserved1(GeeAbstractMultiSet * self)745 gee_abstract_multi_set_real_reserved1 (GeeAbstractMultiSet* self)
746 {
747 }
748
749 void
gee_abstract_multi_set_reserved1(GeeAbstractMultiSet * self)750 gee_abstract_multi_set_reserved1 (GeeAbstractMultiSet* self)
751 {
752 g_return_if_fail (self != NULL);
753 GEE_ABSTRACT_MULTI_SET_GET_CLASS (self)->reserved1 (self);
754 }
755
756 static void
gee_abstract_multi_set_real_reserved2(GeeAbstractMultiSet * self)757 gee_abstract_multi_set_real_reserved2 (GeeAbstractMultiSet* self)
758 {
759 }
760
761 void
gee_abstract_multi_set_reserved2(GeeAbstractMultiSet * self)762 gee_abstract_multi_set_reserved2 (GeeAbstractMultiSet* self)
763 {
764 g_return_if_fail (self != NULL);
765 GEE_ABSTRACT_MULTI_SET_GET_CLASS (self)->reserved2 (self);
766 }
767
768 static void
gee_abstract_multi_set_real_reserved3(GeeAbstractMultiSet * self)769 gee_abstract_multi_set_real_reserved3 (GeeAbstractMultiSet* self)
770 {
771 }
772
773 void
gee_abstract_multi_set_reserved3(GeeAbstractMultiSet * self)774 gee_abstract_multi_set_reserved3 (GeeAbstractMultiSet* self)
775 {
776 g_return_if_fail (self != NULL);
777 GEE_ABSTRACT_MULTI_SET_GET_CLASS (self)->reserved3 (self);
778 }
779
780 static void
gee_abstract_multi_set_real_reserved4(GeeAbstractMultiSet * self)781 gee_abstract_multi_set_real_reserved4 (GeeAbstractMultiSet* self)
782 {
783 }
784
785 void
gee_abstract_multi_set_reserved4(GeeAbstractMultiSet * self)786 gee_abstract_multi_set_reserved4 (GeeAbstractMultiSet* self)
787 {
788 g_return_if_fail (self != NULL);
789 GEE_ABSTRACT_MULTI_SET_GET_CLASS (self)->reserved4 (self);
790 }
791
792 static void
gee_abstract_multi_set_real_reserved5(GeeAbstractMultiSet * self)793 gee_abstract_multi_set_real_reserved5 (GeeAbstractMultiSet* self)
794 {
795 }
796
797 void
gee_abstract_multi_set_reserved5(GeeAbstractMultiSet * self)798 gee_abstract_multi_set_reserved5 (GeeAbstractMultiSet* self)
799 {
800 g_return_if_fail (self != NULL);
801 GEE_ABSTRACT_MULTI_SET_GET_CLASS (self)->reserved5 (self);
802 }
803
804 static void
gee_abstract_multi_set_real_reserved6(GeeAbstractMultiSet * self)805 gee_abstract_multi_set_real_reserved6 (GeeAbstractMultiSet* self)
806 {
807 }
808
809 void
gee_abstract_multi_set_reserved6(GeeAbstractMultiSet * self)810 gee_abstract_multi_set_reserved6 (GeeAbstractMultiSet* self)
811 {
812 g_return_if_fail (self != NULL);
813 GEE_ABSTRACT_MULTI_SET_GET_CLASS (self)->reserved6 (self);
814 }
815
816 static void
gee_abstract_multi_set_real_reserved7(GeeAbstractMultiSet * self)817 gee_abstract_multi_set_real_reserved7 (GeeAbstractMultiSet* self)
818 {
819 }
820
821 void
gee_abstract_multi_set_reserved7(GeeAbstractMultiSet * self)822 gee_abstract_multi_set_reserved7 (GeeAbstractMultiSet* self)
823 {
824 g_return_if_fail (self != NULL);
825 GEE_ABSTRACT_MULTI_SET_GET_CLASS (self)->reserved7 (self);
826 }
827
828 static void
gee_abstract_multi_set_real_reserved8(GeeAbstractMultiSet * self)829 gee_abstract_multi_set_real_reserved8 (GeeAbstractMultiSet* self)
830 {
831 }
832
833 void
gee_abstract_multi_set_reserved8(GeeAbstractMultiSet * self)834 gee_abstract_multi_set_reserved8 (GeeAbstractMultiSet* self)
835 {
836 g_return_if_fail (self != NULL);
837 GEE_ABSTRACT_MULTI_SET_GET_CLASS (self)->reserved8 (self);
838 }
839
840 static gint
gee_abstract_multi_set_real_get_size(GeeAbstractCollection * base)841 gee_abstract_multi_set_real_get_size (GeeAbstractCollection* base)
842 {
843 gint result;
844 GeeAbstractMultiSet* self;
845 self = (GeeAbstractMultiSet*) base;
846 result = self->priv->_nitems;
847 return result;
848 }
849
850 static gboolean
gee_abstract_multi_set_real_get_read_only(GeeAbstractCollection * base)851 gee_abstract_multi_set_real_get_read_only (GeeAbstractCollection* base)
852 {
853 gboolean result;
854 GeeAbstractMultiSet* self;
855 self = (GeeAbstractMultiSet*) base;
856 result = FALSE;
857 return result;
858 }
859
860 GeeMultiSet*
gee_abstract_multi_set_get_read_only_view(GeeAbstractMultiSet * self)861 gee_abstract_multi_set_get_read_only_view (GeeAbstractMultiSet* self)
862 {
863 g_return_val_if_fail (self != NULL, NULL);
864 return GEE_ABSTRACT_MULTI_SET_GET_CLASS (self)->get_read_only_view (self);
865 }
866
867 static GeeMultiSet*
gee_abstract_multi_set_real_get_read_only_view(GeeAbstractMultiSet * base)868 gee_abstract_multi_set_real_get_read_only_view (GeeAbstractMultiSet* base)
869 {
870 GeeMultiSet* result;
871 GeeAbstractMultiSet* self;
872 GeeMultiSet* instance = NULL;
873 GObject* _tmp0_;
874 GeeMultiSet* _tmp1_;
875 self = base;
876 _tmp0_ = g_weak_ref_get (&self->priv->_read_only_view);
877 instance = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_MULTI_SET, GeeMultiSet);
878 _tmp1_ = instance;
879 if (_tmp1_ == NULL) {
880 GeeReadOnlyMultiSet* _tmp2_;
881 GeeMultiSet* _tmp3_;
882 _tmp2_ = gee_read_only_multi_set_new (self->priv->g_type, (GBoxedCopyFunc) self->priv->g_dup_func, (GDestroyNotify) self->priv->g_destroy_func, (GeeMultiSet*) self);
883 _g_object_unref0 (instance);
884 instance = (GeeMultiSet*) _tmp2_;
885 _tmp3_ = instance;
886 g_weak_ref_set (&self->priv->_read_only_view, (GObject*) _tmp3_);
887 }
888 result = instance;
889 return result;
890 }
891
892 static GObject *
gee_abstract_multi_set_constructor(GType type,guint n_construct_properties,GObjectConstructParam * construct_properties)893 gee_abstract_multi_set_constructor (GType type,
894 guint n_construct_properties,
895 GObjectConstructParam * construct_properties)
896 {
897 GObject * obj;
898 GObjectClass * parent_class;
899 GeeAbstractMultiSet * self;
900 parent_class = G_OBJECT_CLASS (gee_abstract_multi_set_parent_class);
901 obj = parent_class->constructor (type, n_construct_properties, construct_properties);
902 self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TYPE_ABSTRACT_MULTI_SET, GeeAbstractMultiSet);
903 g_weak_ref_clear (&self->priv->_read_only_view);
904 g_weak_ref_init (&self->priv->_read_only_view, NULL);
905 return obj;
906 }
907
908 static inline gpointer
gee_abstract_multi_set_iterator_get_instance_private(GeeAbstractMultiSetIterator * self)909 gee_abstract_multi_set_iterator_get_instance_private (GeeAbstractMultiSetIterator* self)
910 {
911 return G_STRUCT_MEMBER_P (self, GeeAbstractMultiSetIterator_private_offset);
912 }
913
914 static GeeAbstractMultiSetIterator*
gee_abstract_multi_set_iterator_construct(GType object_type,GType g_type,GBoxedCopyFunc g_dup_func,GDestroyNotify g_destroy_func,GeeAbstractMultiSet * set)915 gee_abstract_multi_set_iterator_construct (GType object_type,
916 GType g_type,
917 GBoxedCopyFunc g_dup_func,
918 GDestroyNotify g_destroy_func,
919 GeeAbstractMultiSet* set)
920 {
921 GeeAbstractMultiSetIterator * self = NULL;
922 GeeAbstractMultiSet* _tmp0_;
923 GeeAbstractMultiSet* _tmp1_;
924 GeeMap* _tmp2_;
925 GeeMapIterator* _tmp3_;
926 g_return_val_if_fail (set != NULL, NULL);
927 self = (GeeAbstractMultiSetIterator*) g_object_new (object_type, NULL);
928 self->priv->g_type = g_type;
929 self->priv->g_dup_func = g_dup_func;
930 self->priv->g_destroy_func = g_destroy_func;
931 _tmp0_ = _g_object_ref0 (set);
932 _g_object_unref0 (self->priv->_set);
933 self->priv->_set = _tmp0_;
934 _tmp1_ = self->priv->_set;
935 _tmp2_ = _tmp1_->_storage_map;
936 _tmp3_ = gee_map_map_iterator (_tmp2_);
937 _g_object_unref0 (self->priv->_iter);
938 self->priv->_iter = _tmp3_;
939 return self;
940 }
941
942 static GeeAbstractMultiSetIterator*
gee_abstract_multi_set_iterator_new(GType g_type,GBoxedCopyFunc g_dup_func,GDestroyNotify g_destroy_func,GeeAbstractMultiSet * set)943 gee_abstract_multi_set_iterator_new (GType g_type,
944 GBoxedCopyFunc g_dup_func,
945 GDestroyNotify g_destroy_func,
946 GeeAbstractMultiSet* set)
947 {
948 return gee_abstract_multi_set_iterator_construct (GEE_ABSTRACT_MULTI_SET_TYPE_ITERATOR, g_type, g_dup_func, g_destroy_func, set);
949 }
950
951 static gboolean
gee_abstract_multi_set_iterator_real_next(GeeIterator * base)952 gee_abstract_multi_set_iterator_real_next (GeeIterator* base)
953 {
954 GeeAbstractMultiSetIterator * self;
955 gboolean result = FALSE;
956 self = (GeeAbstractMultiSetIterator*) base;
957 self->priv->_removed = FALSE;
958 if (self->priv->_pending == 0) {
959 GeeMapIterator* _tmp0_;
960 _tmp0_ = self->priv->_iter;
961 if (gee_map_iterator_next (_tmp0_)) {
962 GeeMapIterator* _tmp1_;
963 gpointer _tmp2_;
964 _tmp1_ = self->priv->_iter;
965 _tmp2_ = gee_map_iterator_get_value (_tmp1_);
966 self->priv->_pending = ((gint) ((gintptr) _tmp2_)) - 1;
967 result = TRUE;
968 return result;
969 }
970 } else {
971 gint _tmp3_;
972 _tmp3_ = self->priv->_pending;
973 self->priv->_pending = _tmp3_ - 1;
974 result = TRUE;
975 return result;
976 }
977 result = FALSE;
978 return result;
979 }
980
981 static gboolean
gee_abstract_multi_set_iterator_real_has_next(GeeIterator * base)982 gee_abstract_multi_set_iterator_real_has_next (GeeIterator* base)
983 {
984 GeeAbstractMultiSetIterator * self;
985 gboolean _tmp0_ = FALSE;
986 gboolean result = FALSE;
987 self = (GeeAbstractMultiSetIterator*) base;
988 if (self->priv->_pending > 0) {
989 _tmp0_ = TRUE;
990 } else {
991 GeeMapIterator* _tmp1_;
992 _tmp1_ = self->priv->_iter;
993 _tmp0_ = gee_map_iterator_has_next (_tmp1_);
994 }
995 result = _tmp0_;
996 return result;
997 }
998
999 static gpointer
gee_abstract_multi_set_iterator_real_get(GeeIterator * base)1000 gee_abstract_multi_set_iterator_real_get (GeeIterator* base)
1001 {
1002 GeeAbstractMultiSetIterator * self;
1003 GeeMapIterator* _tmp0_;
1004 gpointer _tmp1_;
1005 gpointer result = NULL;
1006 self = (GeeAbstractMultiSetIterator*) base;
1007 _vala_assert (!self->priv->_removed, "! _removed");
1008 _tmp0_ = self->priv->_iter;
1009 _tmp1_ = gee_map_iterator_get_key (_tmp0_);
1010 result = _tmp1_;
1011 return result;
1012 }
1013
1014 static void
gee_abstract_multi_set_iterator_real_remove(GeeIterator * base)1015 gee_abstract_multi_set_iterator_real_remove (GeeIterator* base)
1016 {
1017 GeeAbstractMultiSetIterator * self;
1018 GeeMapIterator* _tmp0_;
1019 GeeMapIterator* _tmp1_;
1020 gpointer _tmp2_;
1021 GeeAbstractMultiSet* _tmp4_;
1022 gint _tmp5_;
1023 self = (GeeAbstractMultiSetIterator*) base;
1024 _vala_assert (!self->priv->_removed, "! _removed");
1025 _tmp0_ = self->priv->_iter;
1026 _tmp1_ = self->priv->_iter;
1027 _tmp2_ = gee_map_iterator_get_value (_tmp1_);
1028 self->priv->_pending = ((gint) ((gintptr) _tmp2_)) - 1;
1029 gee_map_iterator_set_value (_tmp0_, (gpointer) ((gintptr) self->priv->_pending));
1030 if (self->priv->_pending == 0) {
1031 GeeMapIterator* _tmp3_;
1032 _tmp3_ = self->priv->_iter;
1033 gee_map_iterator_unset (_tmp3_);
1034 }
1035 _tmp4_ = self->priv->_set;
1036 _tmp5_ = _tmp4_->priv->_nitems;
1037 _tmp4_->priv->_nitems = _tmp5_ - 1;
1038 self->priv->_removed = TRUE;
1039 }
1040
1041 static gboolean
gee_abstract_multi_set_iterator_real_foreach(GeeTraversable * base,GeeForallFunc f,gpointer f_target)1042 gee_abstract_multi_set_iterator_real_foreach (GeeTraversable* base,
1043 GeeForallFunc f,
1044 gpointer f_target)
1045 {
1046 GeeAbstractMultiSetIterator * self;
1047 GeeMapIterator* _tmp0_;
1048 gboolean _tmp1_;
1049 gboolean _tmp2_;
1050 gboolean result = FALSE;
1051 self = (GeeAbstractMultiSetIterator*) base;
1052 _tmp0_ = self->priv->_iter;
1053 _tmp1_ = gee_map_iterator_get_valid (_tmp0_);
1054 _tmp2_ = _tmp1_;
1055 if (_tmp2_) {
1056 if (!self->priv->_removed) {
1057 GeeMapIterator* _tmp3_;
1058 gpointer _tmp4_;
1059 _tmp3_ = self->priv->_iter;
1060 _tmp4_ = gee_map_iterator_get_key (_tmp3_);
1061 if (!f (_tmp4_, f_target)) {
1062 result = FALSE;
1063 return result;
1064 }
1065 }
1066 {
1067 gint i = 0;
1068 i = self->priv->_pending - 1;
1069 {
1070 gboolean _tmp5_ = FALSE;
1071 _tmp5_ = TRUE;
1072 while (TRUE) {
1073 GeeMapIterator* _tmp6_;
1074 gpointer _tmp7_;
1075 if (!_tmp5_) {
1076 i = i - 1;
1077 }
1078 _tmp5_ = FALSE;
1079 if (!(i >= 0)) {
1080 break;
1081 }
1082 _tmp6_ = self->priv->_iter;
1083 _tmp7_ = gee_map_iterator_get_key (_tmp6_);
1084 if (!f (_tmp7_, f_target)) {
1085 self->priv->_pending = i;
1086 result = FALSE;
1087 return result;
1088 }
1089 }
1090 }
1091 }
1092 }
1093 while (TRUE) {
1094 GeeMapIterator* _tmp8_;
1095 _tmp8_ = self->priv->_iter;
1096 if (!gee_map_iterator_next (_tmp8_)) {
1097 break;
1098 }
1099 {
1100 gint i = 0;
1101 GeeMapIterator* _tmp9_;
1102 gpointer _tmp10_;
1103 _tmp9_ = self->priv->_iter;
1104 _tmp10_ = gee_map_iterator_get_value (_tmp9_);
1105 i = ((gint) ((gintptr) _tmp10_)) - 1;
1106 {
1107 gboolean _tmp11_ = FALSE;
1108 _tmp11_ = TRUE;
1109 while (TRUE) {
1110 GeeMapIterator* _tmp12_;
1111 gpointer _tmp13_;
1112 if (!_tmp11_) {
1113 i = i - 1;
1114 }
1115 _tmp11_ = FALSE;
1116 if (!(i >= 0)) {
1117 break;
1118 }
1119 _tmp12_ = self->priv->_iter;
1120 _tmp13_ = gee_map_iterator_get_key (_tmp12_);
1121 if (!f (_tmp13_, f_target)) {
1122 self->priv->_removed = FALSE;
1123 self->priv->_pending = i;
1124 result = FALSE;
1125 return result;
1126 }
1127 }
1128 }
1129 }
1130 }
1131 self->priv->_removed = FALSE;
1132 self->priv->_pending = 0;
1133 result = TRUE;
1134 return result;
1135 }
1136
1137 static gboolean
gee_abstract_multi_set_iterator_real_get_read_only(GeeIterator * base)1138 gee_abstract_multi_set_iterator_real_get_read_only (GeeIterator* base)
1139 {
1140 gboolean result;
1141 GeeAbstractMultiSetIterator* self;
1142 self = (GeeAbstractMultiSetIterator*) base;
1143 result = FALSE;
1144 return result;
1145 }
1146
1147 static gboolean
gee_abstract_multi_set_iterator_real_get_valid(GeeIterator * base)1148 gee_abstract_multi_set_iterator_real_get_valid (GeeIterator* base)
1149 {
1150 gboolean result;
1151 GeeAbstractMultiSetIterator* self;
1152 gboolean _tmp0_ = FALSE;
1153 self = (GeeAbstractMultiSetIterator*) base;
1154 if (!self->priv->_removed) {
1155 GeeMapIterator* _tmp1_;
1156 gboolean _tmp2_;
1157 gboolean _tmp3_;
1158 _tmp1_ = self->priv->_iter;
1159 _tmp2_ = gee_map_iterator_get_valid (_tmp1_);
1160 _tmp3_ = _tmp2_;
1161 _tmp0_ = _tmp3_;
1162 } else {
1163 _tmp0_ = FALSE;
1164 }
1165 result = _tmp0_;
1166 return result;
1167 }
1168
1169 static void
gee_abstract_multi_set_iterator_class_init(GeeAbstractMultiSetIteratorClass * klass,gpointer klass_data)1170 gee_abstract_multi_set_iterator_class_init (GeeAbstractMultiSetIteratorClass * klass,
1171 gpointer klass_data)
1172 {
1173 gee_abstract_multi_set_iterator_parent_class = g_type_class_peek_parent (klass);
1174 g_type_class_adjust_private_offset (klass, &GeeAbstractMultiSetIterator_private_offset);
1175 G_OBJECT_CLASS (klass)->get_property = _vala_gee_abstract_multi_set_iterator_get_property;
1176 G_OBJECT_CLASS (klass)->set_property = _vala_gee_abstract_multi_set_iterator_set_property;
1177 G_OBJECT_CLASS (klass)->finalize = gee_abstract_multi_set_iterator_finalize;
1178 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_ABSTRACT_MULTI_SET_ITERATOR_G_TYPE, g_param_spec_gtype ("g-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
1179 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_ABSTRACT_MULTI_SET_ITERATOR_G_DUP_FUNC, g_param_spec_pointer ("g-dup-func", "dup func", "dup func", G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
1180 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_ABSTRACT_MULTI_SET_ITERATOR_G_DESTROY_FUNC, g_param_spec_pointer ("g-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
1181 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_ABSTRACT_MULTI_SET_ITERATOR_READ_ONLY_PROPERTY, gee_abstract_multi_set_iterator_properties[GEE_ABSTRACT_MULTI_SET_ITERATOR_READ_ONLY_PROPERTY] = g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
1182 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_ABSTRACT_MULTI_SET_ITERATOR_VALID_PROPERTY, gee_abstract_multi_set_iterator_properties[GEE_ABSTRACT_MULTI_SET_ITERATOR_VALID_PROPERTY] = g_param_spec_boolean ("valid", "valid", "valid", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
1183 }
1184
1185 static GType
gee_abstract_multi_set_iterator_gee_traversable_get_g_type(GeeAbstractMultiSetIterator * self)1186 gee_abstract_multi_set_iterator_gee_traversable_get_g_type (GeeAbstractMultiSetIterator* self)
1187 {
1188 return self->priv->g_type;
1189 }
1190
1191 static GBoxedCopyFunc
gee_abstract_multi_set_iterator_gee_traversable_get_g_dup_func(GeeAbstractMultiSetIterator * self)1192 gee_abstract_multi_set_iterator_gee_traversable_get_g_dup_func (GeeAbstractMultiSetIterator* self)
1193 {
1194 return self->priv->g_dup_func;
1195 }
1196
1197 static GDestroyNotify
gee_abstract_multi_set_iterator_gee_traversable_get_g_destroy_func(GeeAbstractMultiSetIterator * self)1198 gee_abstract_multi_set_iterator_gee_traversable_get_g_destroy_func (GeeAbstractMultiSetIterator* self)
1199 {
1200 return self->priv->g_destroy_func;
1201 }
1202
1203 static void
gee_abstract_multi_set_iterator_gee_traversable_interface_init(GeeTraversableIface * iface,gpointer iface_data)1204 gee_abstract_multi_set_iterator_gee_traversable_interface_init (GeeTraversableIface * iface,
1205 gpointer iface_data)
1206 {
1207 gee_abstract_multi_set_iterator_gee_traversable_parent_iface = g_type_interface_peek_parent (iface);
1208 iface->foreach = (gboolean (*) (GeeTraversable*, GeeForallFunc, gpointer)) gee_abstract_multi_set_iterator_real_foreach;
1209 iface->get_g_type = (GType (*) (GeeTraversable *)) gee_abstract_multi_set_iterator_gee_traversable_get_g_type;
1210 iface->get_g_dup_func = (GBoxedCopyFunc (*) (GeeTraversable *)) gee_abstract_multi_set_iterator_gee_traversable_get_g_dup_func;
1211 iface->get_g_destroy_func = (GDestroyNotify (*) (GeeTraversable *)) gee_abstract_multi_set_iterator_gee_traversable_get_g_destroy_func;
1212 }
1213
1214 static void
gee_abstract_multi_set_iterator_gee_iterator_interface_init(GeeIteratorIface * iface,gpointer iface_data)1215 gee_abstract_multi_set_iterator_gee_iterator_interface_init (GeeIteratorIface * iface,
1216 gpointer iface_data)
1217 {
1218 gee_abstract_multi_set_iterator_gee_iterator_parent_iface = g_type_interface_peek_parent (iface);
1219 iface->next = (gboolean (*) (GeeIterator*)) gee_abstract_multi_set_iterator_real_next;
1220 iface->has_next = (gboolean (*) (GeeIterator*)) gee_abstract_multi_set_iterator_real_has_next;
1221 iface->get = (gpointer (*) (GeeIterator*)) gee_abstract_multi_set_iterator_real_get;
1222 iface->remove = (void (*) (GeeIterator*)) gee_abstract_multi_set_iterator_real_remove;
1223 iface->get_read_only = gee_abstract_multi_set_iterator_real_get_read_only;
1224 iface->get_valid = gee_abstract_multi_set_iterator_real_get_valid;
1225 }
1226
1227 static void
gee_abstract_multi_set_iterator_instance_init(GeeAbstractMultiSetIterator * self,gpointer klass)1228 gee_abstract_multi_set_iterator_instance_init (GeeAbstractMultiSetIterator * self,
1229 gpointer klass)
1230 {
1231 self->priv = gee_abstract_multi_set_iterator_get_instance_private (self);
1232 self->priv->_pending = 0;
1233 self->priv->_removed = FALSE;
1234 }
1235
1236 static void
gee_abstract_multi_set_iterator_finalize(GObject * obj)1237 gee_abstract_multi_set_iterator_finalize (GObject * obj)
1238 {
1239 GeeAbstractMultiSetIterator * self;
1240 self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_ABSTRACT_MULTI_SET_TYPE_ITERATOR, GeeAbstractMultiSetIterator);
1241 _g_object_unref0 (self->priv->_set);
1242 _g_object_unref0 (self->priv->_iter);
1243 G_OBJECT_CLASS (gee_abstract_multi_set_iterator_parent_class)->finalize (obj);
1244 }
1245
1246 static GType
gee_abstract_multi_set_iterator_get_type(void)1247 gee_abstract_multi_set_iterator_get_type (void)
1248 {
1249 static volatile gsize gee_abstract_multi_set_iterator_type_id__volatile = 0;
1250 if (g_once_init_enter (&gee_abstract_multi_set_iterator_type_id__volatile)) {
1251 static const GTypeInfo g_define_type_info = { sizeof (GeeAbstractMultiSetIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_abstract_multi_set_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeAbstractMultiSetIterator), 0, (GInstanceInitFunc) gee_abstract_multi_set_iterator_instance_init, NULL };
1252 static const GInterfaceInfo gee_traversable_info = { (GInterfaceInitFunc) gee_abstract_multi_set_iterator_gee_traversable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
1253 static const GInterfaceInfo gee_iterator_info = { (GInterfaceInitFunc) gee_abstract_multi_set_iterator_gee_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
1254 GType gee_abstract_multi_set_iterator_type_id;
1255 gee_abstract_multi_set_iterator_type_id = g_type_register_static (G_TYPE_OBJECT, "GeeAbstractMultiSetIterator", &g_define_type_info, 0);
1256 g_type_add_interface_static (gee_abstract_multi_set_iterator_type_id, GEE_TYPE_TRAVERSABLE, &gee_traversable_info);
1257 g_type_add_interface_static (gee_abstract_multi_set_iterator_type_id, GEE_TYPE_ITERATOR, &gee_iterator_info);
1258 GeeAbstractMultiSetIterator_private_offset = g_type_add_instance_private (gee_abstract_multi_set_iterator_type_id, sizeof (GeeAbstractMultiSetIteratorPrivate));
1259 g_once_init_leave (&gee_abstract_multi_set_iterator_type_id__volatile, gee_abstract_multi_set_iterator_type_id);
1260 }
1261 return gee_abstract_multi_set_iterator_type_id__volatile;
1262 }
1263
1264 static void
_vala_gee_abstract_multi_set_iterator_get_property(GObject * object,guint property_id,GValue * value,GParamSpec * pspec)1265 _vala_gee_abstract_multi_set_iterator_get_property (GObject * object,
1266 guint property_id,
1267 GValue * value,
1268 GParamSpec * pspec)
1269 {
1270 GeeAbstractMultiSetIterator * self;
1271 self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_ABSTRACT_MULTI_SET_TYPE_ITERATOR, GeeAbstractMultiSetIterator);
1272 switch (property_id) {
1273 case GEE_ABSTRACT_MULTI_SET_ITERATOR_READ_ONLY_PROPERTY:
1274 g_value_set_boolean (value, gee_iterator_get_read_only ((GeeIterator*) self));
1275 break;
1276 case GEE_ABSTRACT_MULTI_SET_ITERATOR_VALID_PROPERTY:
1277 g_value_set_boolean (value, gee_iterator_get_valid ((GeeIterator*) self));
1278 break;
1279 case GEE_ABSTRACT_MULTI_SET_ITERATOR_G_TYPE:
1280 g_value_set_gtype (value, self->priv->g_type);
1281 break;
1282 case GEE_ABSTRACT_MULTI_SET_ITERATOR_G_DUP_FUNC:
1283 g_value_set_pointer (value, self->priv->g_dup_func);
1284 break;
1285 case GEE_ABSTRACT_MULTI_SET_ITERATOR_G_DESTROY_FUNC:
1286 g_value_set_pointer (value, self->priv->g_destroy_func);
1287 break;
1288 default:
1289 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
1290 break;
1291 }
1292 }
1293
1294 static void
_vala_gee_abstract_multi_set_iterator_set_property(GObject * object,guint property_id,const GValue * value,GParamSpec * pspec)1295 _vala_gee_abstract_multi_set_iterator_set_property (GObject * object,
1296 guint property_id,
1297 const GValue * value,
1298 GParamSpec * pspec)
1299 {
1300 GeeAbstractMultiSetIterator * self;
1301 self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_ABSTRACT_MULTI_SET_TYPE_ITERATOR, GeeAbstractMultiSetIterator);
1302 switch (property_id) {
1303 case GEE_ABSTRACT_MULTI_SET_ITERATOR_G_TYPE:
1304 self->priv->g_type = g_value_get_gtype (value);
1305 break;
1306 case GEE_ABSTRACT_MULTI_SET_ITERATOR_G_DUP_FUNC:
1307 self->priv->g_dup_func = g_value_get_pointer (value);
1308 break;
1309 case GEE_ABSTRACT_MULTI_SET_ITERATOR_G_DESTROY_FUNC:
1310 self->priv->g_destroy_func = g_value_get_pointer (value);
1311 break;
1312 default:
1313 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
1314 break;
1315 }
1316 }
1317
1318 static void
gee_abstract_multi_set_class_init(GeeAbstractMultiSetClass * klass,gpointer klass_data)1319 gee_abstract_multi_set_class_init (GeeAbstractMultiSetClass * klass,
1320 gpointer klass_data)
1321 {
1322 gee_abstract_multi_set_parent_class = g_type_class_peek_parent (klass);
1323 g_type_class_adjust_private_offset (klass, &GeeAbstractMultiSet_private_offset);
1324 ((GeeAbstractCollectionClass *) klass)->contains = (gboolean (*) (GeeAbstractCollection*, gconstpointer)) gee_abstract_multi_set_real_contains;
1325 ((GeeAbstractCollectionClass *) klass)->iterator = (GeeIterator* (*) (GeeAbstractCollection*)) gee_abstract_multi_set_real_iterator;
1326 ((GeeAbstractCollectionClass *) klass)->add = (gboolean (*) (GeeAbstractCollection*, gconstpointer)) gee_abstract_multi_set_real_add;
1327 ((GeeAbstractCollectionClass *) klass)->remove = (gboolean (*) (GeeAbstractCollection*, gconstpointer)) gee_abstract_multi_set_real_remove;
1328 ((GeeAbstractCollectionClass *) klass)->clear = (void (*) (GeeAbstractCollection*)) gee_abstract_multi_set_real_clear;
1329 ((GeeAbstractMultiSetClass *) klass)->reserved0 = (void (*) (GeeAbstractMultiSet*)) gee_abstract_multi_set_real_reserved0;
1330 ((GeeAbstractMultiSetClass *) klass)->reserved1 = (void (*) (GeeAbstractMultiSet*)) gee_abstract_multi_set_real_reserved1;
1331 ((GeeAbstractMultiSetClass *) klass)->reserved2 = (void (*) (GeeAbstractMultiSet*)) gee_abstract_multi_set_real_reserved2;
1332 ((GeeAbstractMultiSetClass *) klass)->reserved3 = (void (*) (GeeAbstractMultiSet*)) gee_abstract_multi_set_real_reserved3;
1333 ((GeeAbstractMultiSetClass *) klass)->reserved4 = (void (*) (GeeAbstractMultiSet*)) gee_abstract_multi_set_real_reserved4;
1334 ((GeeAbstractMultiSetClass *) klass)->reserved5 = (void (*) (GeeAbstractMultiSet*)) gee_abstract_multi_set_real_reserved5;
1335 ((GeeAbstractMultiSetClass *) klass)->reserved6 = (void (*) (GeeAbstractMultiSet*)) gee_abstract_multi_set_real_reserved6;
1336 ((GeeAbstractMultiSetClass *) klass)->reserved7 = (void (*) (GeeAbstractMultiSet*)) gee_abstract_multi_set_real_reserved7;
1337 ((GeeAbstractMultiSetClass *) klass)->reserved8 = (void (*) (GeeAbstractMultiSet*)) gee_abstract_multi_set_real_reserved8;
1338 GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_size = gee_abstract_multi_set_real_get_size;
1339 GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_read_only = gee_abstract_multi_set_real_get_read_only;
1340 GEE_ABSTRACT_MULTI_SET_CLASS (klass)->get_read_only_view = gee_abstract_multi_set_real_get_read_only_view;
1341 G_OBJECT_CLASS (klass)->get_property = _vala_gee_abstract_multi_set_get_property;
1342 G_OBJECT_CLASS (klass)->set_property = _vala_gee_abstract_multi_set_set_property;
1343 G_OBJECT_CLASS (klass)->constructor = gee_abstract_multi_set_constructor;
1344 G_OBJECT_CLASS (klass)->finalize = gee_abstract_multi_set_finalize;
1345 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_ABSTRACT_MULTI_SET_G_TYPE, g_param_spec_gtype ("g-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
1346 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_ABSTRACT_MULTI_SET_G_DUP_FUNC, g_param_spec_pointer ("g-dup-func", "dup func", "dup func", G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
1347 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_ABSTRACT_MULTI_SET_G_DESTROY_FUNC, g_param_spec_pointer ("g-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
1348 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_ABSTRACT_MULTI_SET_SIZE_PROPERTY, gee_abstract_multi_set_properties[GEE_ABSTRACT_MULTI_SET_SIZE_PROPERTY] = g_param_spec_int ("size", "size", "size", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
1349 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_ABSTRACT_MULTI_SET_READ_ONLY_PROPERTY, gee_abstract_multi_set_properties[GEE_ABSTRACT_MULTI_SET_READ_ONLY_PROPERTY] = g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
1350 }
1351
1352 static GType
gee_abstract_multi_set_gee_multi_set_get_g_type(GeeAbstractMultiSet * self)1353 gee_abstract_multi_set_gee_multi_set_get_g_type (GeeAbstractMultiSet* self)
1354 {
1355 return self->priv->g_type;
1356 }
1357
1358 static GBoxedCopyFunc
gee_abstract_multi_set_gee_multi_set_get_g_dup_func(GeeAbstractMultiSet * self)1359 gee_abstract_multi_set_gee_multi_set_get_g_dup_func (GeeAbstractMultiSet* self)
1360 {
1361 return self->priv->g_dup_func;
1362 }
1363
1364 static GDestroyNotify
gee_abstract_multi_set_gee_multi_set_get_g_destroy_func(GeeAbstractMultiSet * self)1365 gee_abstract_multi_set_gee_multi_set_get_g_destroy_func (GeeAbstractMultiSet* self)
1366 {
1367 return self->priv->g_destroy_func;
1368 }
1369
1370 static void
gee_abstract_multi_set_gee_multi_set_interface_init(GeeMultiSetIface * iface,gpointer iface_data)1371 gee_abstract_multi_set_gee_multi_set_interface_init (GeeMultiSetIface * iface,
1372 gpointer iface_data)
1373 {
1374 gee_abstract_multi_set_gee_multi_set_parent_iface = g_type_interface_peek_parent (iface);
1375 iface->count = (gint (*) (GeeMultiSet*, gconstpointer)) gee_abstract_multi_set_real_count;
1376 iface->get_g_type = (GType (*) (GeeMultiSet *)) gee_abstract_multi_set_gee_multi_set_get_g_type;
1377 iface->get_g_dup_func = (GBoxedCopyFunc (*) (GeeMultiSet *)) gee_abstract_multi_set_gee_multi_set_get_g_dup_func;
1378 iface->get_g_destroy_func = (GDestroyNotify (*) (GeeMultiSet *)) gee_abstract_multi_set_gee_multi_set_get_g_destroy_func;
1379 iface->get_read_only_view = (GeeMultiSet* (*) (GeeMultiSet *)) gee_abstract_multi_set_get_read_only_view;
1380 }
1381
1382 static void
gee_abstract_multi_set_instance_init(GeeAbstractMultiSet * self,gpointer klass)1383 gee_abstract_multi_set_instance_init (GeeAbstractMultiSet * self,
1384 gpointer klass)
1385 {
1386 self->priv = gee_abstract_multi_set_get_instance_private (self);
1387 self->priv->_nitems = 0;
1388 }
1389
1390 static void
gee_abstract_multi_set_finalize(GObject * obj)1391 gee_abstract_multi_set_finalize (GObject * obj)
1392 {
1393 GeeAbstractMultiSet * self;
1394 self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TYPE_ABSTRACT_MULTI_SET, GeeAbstractMultiSet);
1395 _g_object_unref0 (self->_storage_map);
1396 g_weak_ref_clear (&self->priv->_read_only_view);
1397 G_OBJECT_CLASS (gee_abstract_multi_set_parent_class)->finalize (obj);
1398 }
1399
1400 /**
1401 * Skeletal implementation of the {@link MultiSet} interface.
1402 *
1403 * @see HashMultiSet
1404 * @see TreeMultiSet
1405 */
1406 GType
gee_abstract_multi_set_get_type(void)1407 gee_abstract_multi_set_get_type (void)
1408 {
1409 static volatile gsize gee_abstract_multi_set_type_id__volatile = 0;
1410 if (g_once_init_enter (&gee_abstract_multi_set_type_id__volatile)) {
1411 static const GTypeInfo g_define_type_info = { sizeof (GeeAbstractMultiSetClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_abstract_multi_set_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeAbstractMultiSet), 0, (GInstanceInitFunc) gee_abstract_multi_set_instance_init, NULL };
1412 static const GInterfaceInfo gee_multi_set_info = { (GInterfaceInitFunc) gee_abstract_multi_set_gee_multi_set_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
1413 GType gee_abstract_multi_set_type_id;
1414 gee_abstract_multi_set_type_id = g_type_register_static (GEE_TYPE_ABSTRACT_COLLECTION, "GeeAbstractMultiSet", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
1415 g_type_add_interface_static (gee_abstract_multi_set_type_id, GEE_TYPE_MULTI_SET, &gee_multi_set_info);
1416 GeeAbstractMultiSet_private_offset = g_type_add_instance_private (gee_abstract_multi_set_type_id, sizeof (GeeAbstractMultiSetPrivate));
1417 g_once_init_leave (&gee_abstract_multi_set_type_id__volatile, gee_abstract_multi_set_type_id);
1418 }
1419 return gee_abstract_multi_set_type_id__volatile;
1420 }
1421
1422 static void
_vala_gee_abstract_multi_set_get_property(GObject * object,guint property_id,GValue * value,GParamSpec * pspec)1423 _vala_gee_abstract_multi_set_get_property (GObject * object,
1424 guint property_id,
1425 GValue * value,
1426 GParamSpec * pspec)
1427 {
1428 GeeAbstractMultiSet * self;
1429 self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TYPE_ABSTRACT_MULTI_SET, GeeAbstractMultiSet);
1430 switch (property_id) {
1431 case GEE_ABSTRACT_MULTI_SET_SIZE_PROPERTY:
1432 g_value_set_int (value, gee_abstract_collection_get_size ((GeeAbstractCollection*) self));
1433 break;
1434 case GEE_ABSTRACT_MULTI_SET_READ_ONLY_PROPERTY:
1435 g_value_set_boolean (value, gee_abstract_collection_get_read_only ((GeeAbstractCollection*) self));
1436 break;
1437 case GEE_ABSTRACT_MULTI_SET_G_TYPE:
1438 g_value_set_gtype (value, self->priv->g_type);
1439 break;
1440 case GEE_ABSTRACT_MULTI_SET_G_DUP_FUNC:
1441 g_value_set_pointer (value, self->priv->g_dup_func);
1442 break;
1443 case GEE_ABSTRACT_MULTI_SET_G_DESTROY_FUNC:
1444 g_value_set_pointer (value, self->priv->g_destroy_func);
1445 break;
1446 default:
1447 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
1448 break;
1449 }
1450 }
1451
1452 static void
_vala_gee_abstract_multi_set_set_property(GObject * object,guint property_id,const GValue * value,GParamSpec * pspec)1453 _vala_gee_abstract_multi_set_set_property (GObject * object,
1454 guint property_id,
1455 const GValue * value,
1456 GParamSpec * pspec)
1457 {
1458 GeeAbstractMultiSet * self;
1459 self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TYPE_ABSTRACT_MULTI_SET, GeeAbstractMultiSet);
1460 switch (property_id) {
1461 case GEE_ABSTRACT_MULTI_SET_G_TYPE:
1462 self->priv->g_type = g_value_get_gtype (value);
1463 break;
1464 case GEE_ABSTRACT_MULTI_SET_G_DUP_FUNC:
1465 self->priv->g_dup_func = g_value_get_pointer (value);
1466 break;
1467 case GEE_ABSTRACT_MULTI_SET_G_DESTROY_FUNC:
1468 self->priv->g_destroy_func = g_value_get_pointer (value);
1469 break;
1470 default:
1471 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
1472 break;
1473 }
1474 }
1475
1476