1 /* mapiterator.c generated by valac, the Vala compiler
2 * generated from mapiterator.vala, do not modify */
3
4 /* mapiterator.vala
5 *
6 * Copyright (C) 2011 Florian Brosch
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 * Florian Brosch <flo.brosch@gmail.com>
24 */
25
26 #include "valagee.h"
27 #include <glib-object.h>
28 #include <glib.h>
29 #include <gobject/gvaluecollector.h>
30
31 typedef struct _ValaParamSpecMapIterator ValaParamSpecMapIterator;
32
33 struct _ValaMapIteratorPrivate {
34 GType k_type;
35 GBoxedCopyFunc k_dup_func;
36 GDestroyNotify k_destroy_func;
37 GType v_type;
38 GBoxedCopyFunc v_dup_func;
39 GDestroyNotify v_destroy_func;
40 };
41
42 struct _ValaParamSpecMapIterator {
43 GParamSpec parent_instance;
44 };
45
46 static gint ValaMapIterator_private_offset;
47 static gpointer vala_map_iterator_parent_class = NULL;
48
49 static gboolean vala_map_iterator_real_next (ValaMapIterator* self);
50 static gpointer vala_map_iterator_real_get_key (ValaMapIterator* self);
51 static gpointer vala_map_iterator_real_get_value (ValaMapIterator* self);
52 static void vala_map_iterator_finalize (ValaMapIterator * obj);
53 static GType vala_map_iterator_get_type_once (void);
54
55 static inline gpointer
vala_map_iterator_get_instance_private(ValaMapIterator * self)56 vala_map_iterator_get_instance_private (ValaMapIterator* self)
57 {
58 return G_STRUCT_MEMBER_P (self, ValaMapIterator_private_offset);
59 }
60
61 /**
62 * Advances to the next element in the iteration.
63 *
64 * @return true if the iterator has a next element
65 */
66 static gboolean
vala_map_iterator_real_next(ValaMapIterator * self)67 vala_map_iterator_real_next (ValaMapIterator* self)
68 {
69 gboolean _tmp0_ = FALSE;
70 g_critical ("Type `%s' does not implement abstract method `vala_map_iterator_next'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
71 return _tmp0_;
72 }
73
74 gboolean
vala_map_iterator_next(ValaMapIterator * self)75 vala_map_iterator_next (ValaMapIterator* self)
76 {
77 g_return_val_if_fail (self != NULL, FALSE);
78 return VALA_MAP_ITERATOR_GET_CLASS (self)->next (self);
79 }
80
81 /**
82 * Returns the current key in the iteration.
83 *
84 * @return the current key in the iteration
85 */
86 static gpointer
vala_map_iterator_real_get_key(ValaMapIterator * self)87 vala_map_iterator_real_get_key (ValaMapIterator* self)
88 {
89 g_critical ("Type `%s' does not implement abstract method `vala_map_iterator_get_key'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
90 return NULL;
91 }
92
93 gpointer
vala_map_iterator_get_key(ValaMapIterator * self)94 vala_map_iterator_get_key (ValaMapIterator* self)
95 {
96 g_return_val_if_fail (self != NULL, NULL);
97 return VALA_MAP_ITERATOR_GET_CLASS (self)->get_key (self);
98 }
99
100 /**
101 * Returns the current value in the iteration.
102 *
103 * @return the current value in the iteration
104 */
105 static gpointer
vala_map_iterator_real_get_value(ValaMapIterator * self)106 vala_map_iterator_real_get_value (ValaMapIterator* self)
107 {
108 g_critical ("Type `%s' does not implement abstract method `vala_map_iterator_get_value'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
109 return NULL;
110 }
111
112 gpointer
vala_map_iterator_get_value(ValaMapIterator * self)113 vala_map_iterator_get_value (ValaMapIterator* self)
114 {
115 g_return_val_if_fail (self != NULL, NULL);
116 return VALA_MAP_ITERATOR_GET_CLASS (self)->get_value (self);
117 }
118
119 ValaMapIterator*
vala_map_iterator_construct(GType object_type,GType k_type,GBoxedCopyFunc k_dup_func,GDestroyNotify k_destroy_func,GType v_type,GBoxedCopyFunc v_dup_func,GDestroyNotify v_destroy_func)120 vala_map_iterator_construct (GType object_type,
121 GType k_type,
122 GBoxedCopyFunc k_dup_func,
123 GDestroyNotify k_destroy_func,
124 GType v_type,
125 GBoxedCopyFunc v_dup_func,
126 GDestroyNotify v_destroy_func)
127 {
128 ValaMapIterator* self = NULL;
129 self = (ValaMapIterator*) g_type_create_instance (object_type);
130 self->priv->k_type = k_type;
131 self->priv->k_dup_func = k_dup_func;
132 self->priv->k_destroy_func = k_destroy_func;
133 self->priv->v_type = v_type;
134 self->priv->v_dup_func = v_dup_func;
135 self->priv->v_destroy_func = v_destroy_func;
136 return self;
137 }
138
139 static void
vala_value_map_iterator_init(GValue * value)140 vala_value_map_iterator_init (GValue* value)
141 {
142 value->data[0].v_pointer = NULL;
143 }
144
145 static void
vala_value_map_iterator_free_value(GValue * value)146 vala_value_map_iterator_free_value (GValue* value)
147 {
148 if (value->data[0].v_pointer) {
149 vala_map_iterator_unref (value->data[0].v_pointer);
150 }
151 }
152
153 static void
vala_value_map_iterator_copy_value(const GValue * src_value,GValue * dest_value)154 vala_value_map_iterator_copy_value (const GValue* src_value,
155 GValue* dest_value)
156 {
157 if (src_value->data[0].v_pointer) {
158 dest_value->data[0].v_pointer = vala_map_iterator_ref (src_value->data[0].v_pointer);
159 } else {
160 dest_value->data[0].v_pointer = NULL;
161 }
162 }
163
164 static gpointer
vala_value_map_iterator_peek_pointer(const GValue * value)165 vala_value_map_iterator_peek_pointer (const GValue* value)
166 {
167 return value->data[0].v_pointer;
168 }
169
170 static gchar*
vala_value_map_iterator_collect_value(GValue * value,guint n_collect_values,GTypeCValue * collect_values,guint collect_flags)171 vala_value_map_iterator_collect_value (GValue* value,
172 guint n_collect_values,
173 GTypeCValue* collect_values,
174 guint collect_flags)
175 {
176 if (collect_values[0].v_pointer) {
177 ValaMapIterator * object;
178 object = collect_values[0].v_pointer;
179 if (object->parent_instance.g_class == NULL) {
180 return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
181 } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
182 return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
183 }
184 value->data[0].v_pointer = vala_map_iterator_ref (object);
185 } else {
186 value->data[0].v_pointer = NULL;
187 }
188 return NULL;
189 }
190
191 static gchar*
vala_value_map_iterator_lcopy_value(const GValue * value,guint n_collect_values,GTypeCValue * collect_values,guint collect_flags)192 vala_value_map_iterator_lcopy_value (const GValue* value,
193 guint n_collect_values,
194 GTypeCValue* collect_values,
195 guint collect_flags)
196 {
197 ValaMapIterator ** object_p;
198 object_p = collect_values[0].v_pointer;
199 if (!object_p) {
200 return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
201 }
202 if (!value->data[0].v_pointer) {
203 *object_p = NULL;
204 } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
205 *object_p = value->data[0].v_pointer;
206 } else {
207 *object_p = vala_map_iterator_ref (value->data[0].v_pointer);
208 }
209 return NULL;
210 }
211
212 GParamSpec*
vala_param_spec_map_iterator(const gchar * name,const gchar * nick,const gchar * blurb,GType object_type,GParamFlags flags)213 vala_param_spec_map_iterator (const gchar* name,
214 const gchar* nick,
215 const gchar* blurb,
216 GType object_type,
217 GParamFlags flags)
218 {
219 ValaParamSpecMapIterator* spec;
220 g_return_val_if_fail (g_type_is_a (object_type, VALA_TYPE_MAP_ITERATOR), NULL);
221 spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
222 G_PARAM_SPEC (spec)->value_type = object_type;
223 return G_PARAM_SPEC (spec);
224 }
225
226 gpointer
vala_value_get_map_iterator(const GValue * value)227 vala_value_get_map_iterator (const GValue* value)
228 {
229 g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_MAP_ITERATOR), NULL);
230 return value->data[0].v_pointer;
231 }
232
233 void
vala_value_set_map_iterator(GValue * value,gpointer v_object)234 vala_value_set_map_iterator (GValue* value,
235 gpointer v_object)
236 {
237 ValaMapIterator * old;
238 g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_MAP_ITERATOR));
239 old = value->data[0].v_pointer;
240 if (v_object) {
241 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_TYPE_MAP_ITERATOR));
242 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
243 value->data[0].v_pointer = v_object;
244 vala_map_iterator_ref (value->data[0].v_pointer);
245 } else {
246 value->data[0].v_pointer = NULL;
247 }
248 if (old) {
249 vala_map_iterator_unref (old);
250 }
251 }
252
253 void
vala_value_take_map_iterator(GValue * value,gpointer v_object)254 vala_value_take_map_iterator (GValue* value,
255 gpointer v_object)
256 {
257 ValaMapIterator * old;
258 g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_MAP_ITERATOR));
259 old = value->data[0].v_pointer;
260 if (v_object) {
261 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_TYPE_MAP_ITERATOR));
262 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
263 value->data[0].v_pointer = v_object;
264 } else {
265 value->data[0].v_pointer = NULL;
266 }
267 if (old) {
268 vala_map_iterator_unref (old);
269 }
270 }
271
272 static void
vala_map_iterator_class_init(ValaMapIteratorClass * klass,gpointer klass_data)273 vala_map_iterator_class_init (ValaMapIteratorClass * klass,
274 gpointer klass_data)
275 {
276 vala_map_iterator_parent_class = g_type_class_peek_parent (klass);
277 ((ValaMapIteratorClass *) klass)->finalize = vala_map_iterator_finalize;
278 g_type_class_adjust_private_offset (klass, &ValaMapIterator_private_offset);
279 ((ValaMapIteratorClass *) klass)->next = (gboolean (*) (ValaMapIterator*)) vala_map_iterator_real_next;
280 ((ValaMapIteratorClass *) klass)->get_key = (gpointer (*) (ValaMapIterator*)) vala_map_iterator_real_get_key;
281 ((ValaMapIteratorClass *) klass)->get_value = (gpointer (*) (ValaMapIterator*)) vala_map_iterator_real_get_value;
282 }
283
284 static void
vala_map_iterator_instance_init(ValaMapIterator * self,gpointer klass)285 vala_map_iterator_instance_init (ValaMapIterator * self,
286 gpointer klass)
287 {
288 self->priv = vala_map_iterator_get_instance_private (self);
289 self->ref_count = 1;
290 }
291
292 static void
vala_map_iterator_finalize(ValaMapIterator * obj)293 vala_map_iterator_finalize (ValaMapIterator * obj)
294 {
295 ValaMapIterator * self;
296 self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_MAP_ITERATOR, ValaMapIterator);
297 g_signal_handlers_destroy (self);
298 }
299
300 /**
301 * An iterator over a map.
302 */
303 static GType
vala_map_iterator_get_type_once(void)304 vala_map_iterator_get_type_once (void)
305 {
306 static const GTypeValueTable g_define_type_value_table = { vala_value_map_iterator_init, vala_value_map_iterator_free_value, vala_value_map_iterator_copy_value, vala_value_map_iterator_peek_pointer, "p", vala_value_map_iterator_collect_value, "p", vala_value_map_iterator_lcopy_value };
307 static const GTypeInfo g_define_type_info = { sizeof (ValaMapIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_map_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaMapIterator), 0, (GInstanceInitFunc) vala_map_iterator_instance_init, &g_define_type_value_table };
308 static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
309 GType vala_map_iterator_type_id;
310 vala_map_iterator_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ValaMapIterator", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
311 ValaMapIterator_private_offset = g_type_add_instance_private (vala_map_iterator_type_id, sizeof (ValaMapIteratorPrivate));
312 return vala_map_iterator_type_id;
313 }
314
315 GType
vala_map_iterator_get_type(void)316 vala_map_iterator_get_type (void)
317 {
318 static volatile gsize vala_map_iterator_type_id__volatile = 0;
319 if (g_once_init_enter (&vala_map_iterator_type_id__volatile)) {
320 GType vala_map_iterator_type_id;
321 vala_map_iterator_type_id = vala_map_iterator_get_type_once ();
322 g_once_init_leave (&vala_map_iterator_type_id__volatile, vala_map_iterator_type_id);
323 }
324 return vala_map_iterator_type_id__volatile;
325 }
326
327 gpointer
vala_map_iterator_ref(gpointer instance)328 vala_map_iterator_ref (gpointer instance)
329 {
330 ValaMapIterator * self;
331 self = instance;
332 g_atomic_int_inc (&self->ref_count);
333 return instance;
334 }
335
336 void
vala_map_iterator_unref(gpointer instance)337 vala_map_iterator_unref (gpointer instance)
338 {
339 ValaMapIterator * self;
340 self = instance;
341 if (g_atomic_int_dec_and_test (&self->ref_count)) {
342 VALA_MAP_ITERATOR_GET_CLASS (self)->finalize (self);
343 g_type_free_instance ((GTypeInstance *) self);
344 }
345 }
346
347