1 /* valatargetvalue.c generated by valac, the Vala compiler
2 * generated from valatargetvalue.vala, do not modify */
3
4 /* valatargetvalue.vala
5 *
6 * Copyright (C) 2010 Jürg Billeter
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 * Jürg Billeter <j@bitron.ch>
24 */
25
26 #include "vala.h"
27 #include <glib.h>
28 #include <gobject/gvaluecollector.h>
29
30 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
31 typedef struct _ValaParamSpecTargetValue ValaParamSpecTargetValue;
32
33 struct _ValaTargetValuePrivate {
34 ValaDataType* _value_type;
35 ValaDataType* _actual_value_type;
36 };
37
38 struct _ValaParamSpecTargetValue {
39 GParamSpec parent_instance;
40 };
41
42 static gint ValaTargetValue_private_offset;
43 static gpointer vala_target_value_parent_class = NULL;
44
45 static void vala_target_value_finalize (ValaTargetValue * obj);
46 static GType vala_target_value_get_type_once (void);
47
48 static inline gpointer
vala_target_value_get_instance_private(ValaTargetValue * self)49 vala_target_value_get_instance_private (ValaTargetValue* self)
50 {
51 return G_STRUCT_MEMBER_P (self, ValaTargetValue_private_offset);
52 }
53
54 ValaDataType*
vala_target_value_get_value_type(ValaTargetValue * self)55 vala_target_value_get_value_type (ValaTargetValue* self)
56 {
57 ValaDataType* result;
58 ValaDataType* _tmp0_;
59 g_return_val_if_fail (self != NULL, NULL);
60 _tmp0_ = self->priv->_value_type;
61 result = _tmp0_;
62 return result;
63 }
64
65 static gpointer
_vala_code_node_ref0(gpointer self)66 _vala_code_node_ref0 (gpointer self)
67 {
68 return self ? vala_code_node_ref (self) : NULL;
69 }
70
71 void
vala_target_value_set_value_type(ValaTargetValue * self,ValaDataType * value)72 vala_target_value_set_value_type (ValaTargetValue* self,
73 ValaDataType* value)
74 {
75 ValaDataType* _tmp0_;
76 g_return_if_fail (self != NULL);
77 _tmp0_ = _vala_code_node_ref0 (value);
78 _vala_code_node_unref0 (self->priv->_value_type);
79 self->priv->_value_type = _tmp0_;
80 }
81
82 ValaDataType*
vala_target_value_get_actual_value_type(ValaTargetValue * self)83 vala_target_value_get_actual_value_type (ValaTargetValue* self)
84 {
85 ValaDataType* result;
86 ValaDataType* _tmp0_;
87 g_return_val_if_fail (self != NULL, NULL);
88 _tmp0_ = self->priv->_actual_value_type;
89 result = _tmp0_;
90 return result;
91 }
92
93 void
vala_target_value_set_actual_value_type(ValaTargetValue * self,ValaDataType * value)94 vala_target_value_set_actual_value_type (ValaTargetValue* self,
95 ValaDataType* value)
96 {
97 ValaDataType* _tmp0_;
98 g_return_if_fail (self != NULL);
99 _tmp0_ = _vala_code_node_ref0 (value);
100 _vala_code_node_unref0 (self->priv->_actual_value_type);
101 self->priv->_actual_value_type = _tmp0_;
102 }
103
104 ValaTargetValue*
vala_target_value_construct(GType object_type,ValaDataType * value_type)105 vala_target_value_construct (GType object_type,
106 ValaDataType* value_type)
107 {
108 ValaTargetValue* self = NULL;
109 self = (ValaTargetValue*) g_type_create_instance (object_type);
110 vala_target_value_set_value_type (self, value_type);
111 return self;
112 }
113
114 static void
vala_value_target_value_init(GValue * value)115 vala_value_target_value_init (GValue* value)
116 {
117 value->data[0].v_pointer = NULL;
118 }
119
120 static void
vala_value_target_value_free_value(GValue * value)121 vala_value_target_value_free_value (GValue* value)
122 {
123 if (value->data[0].v_pointer) {
124 vala_target_value_unref (value->data[0].v_pointer);
125 }
126 }
127
128 static void
vala_value_target_value_copy_value(const GValue * src_value,GValue * dest_value)129 vala_value_target_value_copy_value (const GValue* src_value,
130 GValue* dest_value)
131 {
132 if (src_value->data[0].v_pointer) {
133 dest_value->data[0].v_pointer = vala_target_value_ref (src_value->data[0].v_pointer);
134 } else {
135 dest_value->data[0].v_pointer = NULL;
136 }
137 }
138
139 static gpointer
vala_value_target_value_peek_pointer(const GValue * value)140 vala_value_target_value_peek_pointer (const GValue* value)
141 {
142 return value->data[0].v_pointer;
143 }
144
145 static gchar*
vala_value_target_value_collect_value(GValue * value,guint n_collect_values,GTypeCValue * collect_values,guint collect_flags)146 vala_value_target_value_collect_value (GValue* value,
147 guint n_collect_values,
148 GTypeCValue* collect_values,
149 guint collect_flags)
150 {
151 if (collect_values[0].v_pointer) {
152 ValaTargetValue * object;
153 object = collect_values[0].v_pointer;
154 if (object->parent_instance.g_class == NULL) {
155 return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
156 } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
157 return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
158 }
159 value->data[0].v_pointer = vala_target_value_ref (object);
160 } else {
161 value->data[0].v_pointer = NULL;
162 }
163 return NULL;
164 }
165
166 static gchar*
vala_value_target_value_lcopy_value(const GValue * value,guint n_collect_values,GTypeCValue * collect_values,guint collect_flags)167 vala_value_target_value_lcopy_value (const GValue* value,
168 guint n_collect_values,
169 GTypeCValue* collect_values,
170 guint collect_flags)
171 {
172 ValaTargetValue ** object_p;
173 object_p = collect_values[0].v_pointer;
174 if (!object_p) {
175 return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
176 }
177 if (!value->data[0].v_pointer) {
178 *object_p = NULL;
179 } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
180 *object_p = value->data[0].v_pointer;
181 } else {
182 *object_p = vala_target_value_ref (value->data[0].v_pointer);
183 }
184 return NULL;
185 }
186
187 GParamSpec*
vala_param_spec_target_value(const gchar * name,const gchar * nick,const gchar * blurb,GType object_type,GParamFlags flags)188 vala_param_spec_target_value (const gchar* name,
189 const gchar* nick,
190 const gchar* blurb,
191 GType object_type,
192 GParamFlags flags)
193 {
194 ValaParamSpecTargetValue* spec;
195 g_return_val_if_fail (g_type_is_a (object_type, VALA_TYPE_TARGET_VALUE), NULL);
196 spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
197 G_PARAM_SPEC (spec)->value_type = object_type;
198 return G_PARAM_SPEC (spec);
199 }
200
201 gpointer
vala_value_get_target_value(const GValue * value)202 vala_value_get_target_value (const GValue* value)
203 {
204 g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_TARGET_VALUE), NULL);
205 return value->data[0].v_pointer;
206 }
207
208 void
vala_value_set_target_value(GValue * value,gpointer v_object)209 vala_value_set_target_value (GValue* value,
210 gpointer v_object)
211 {
212 ValaTargetValue * old;
213 g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_TARGET_VALUE));
214 old = value->data[0].v_pointer;
215 if (v_object) {
216 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_TYPE_TARGET_VALUE));
217 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
218 value->data[0].v_pointer = v_object;
219 vala_target_value_ref (value->data[0].v_pointer);
220 } else {
221 value->data[0].v_pointer = NULL;
222 }
223 if (old) {
224 vala_target_value_unref (old);
225 }
226 }
227
228 void
vala_value_take_target_value(GValue * value,gpointer v_object)229 vala_value_take_target_value (GValue* value,
230 gpointer v_object)
231 {
232 ValaTargetValue * old;
233 g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_TARGET_VALUE));
234 old = value->data[0].v_pointer;
235 if (v_object) {
236 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_TYPE_TARGET_VALUE));
237 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
238 value->data[0].v_pointer = v_object;
239 } else {
240 value->data[0].v_pointer = NULL;
241 }
242 if (old) {
243 vala_target_value_unref (old);
244 }
245 }
246
247 static void
vala_target_value_class_init(ValaTargetValueClass * klass,gpointer klass_data)248 vala_target_value_class_init (ValaTargetValueClass * klass,
249 gpointer klass_data)
250 {
251 vala_target_value_parent_class = g_type_class_peek_parent (klass);
252 ((ValaTargetValueClass *) klass)->finalize = vala_target_value_finalize;
253 g_type_class_adjust_private_offset (klass, &ValaTargetValue_private_offset);
254 }
255
256 static void
vala_target_value_instance_init(ValaTargetValue * self,gpointer klass)257 vala_target_value_instance_init (ValaTargetValue * self,
258 gpointer klass)
259 {
260 self->priv = vala_target_value_get_instance_private (self);
261 self->ref_count = 1;
262 }
263
264 static void
vala_target_value_finalize(ValaTargetValue * obj)265 vala_target_value_finalize (ValaTargetValue * obj)
266 {
267 ValaTargetValue * self;
268 self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_TARGET_VALUE, ValaTargetValue);
269 g_signal_handlers_destroy (self);
270 _vala_code_node_unref0 (self->priv->_value_type);
271 _vala_code_node_unref0 (self->priv->_actual_value_type);
272 }
273
274 static GType
vala_target_value_get_type_once(void)275 vala_target_value_get_type_once (void)
276 {
277 static const GTypeValueTable g_define_type_value_table = { vala_value_target_value_init, vala_value_target_value_free_value, vala_value_target_value_copy_value, vala_value_target_value_peek_pointer, "p", vala_value_target_value_collect_value, "p", vala_value_target_value_lcopy_value };
278 static const GTypeInfo g_define_type_info = { sizeof (ValaTargetValueClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_target_value_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaTargetValue), 0, (GInstanceInitFunc) vala_target_value_instance_init, &g_define_type_value_table };
279 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) };
280 GType vala_target_value_type_id;
281 vala_target_value_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ValaTargetValue", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
282 ValaTargetValue_private_offset = g_type_add_instance_private (vala_target_value_type_id, sizeof (ValaTargetValuePrivate));
283 return vala_target_value_type_id;
284 }
285
286 GType
vala_target_value_get_type(void)287 vala_target_value_get_type (void)
288 {
289 static volatile gsize vala_target_value_type_id__volatile = 0;
290 if (g_once_init_enter (&vala_target_value_type_id__volatile)) {
291 GType vala_target_value_type_id;
292 vala_target_value_type_id = vala_target_value_get_type_once ();
293 g_once_init_leave (&vala_target_value_type_id__volatile, vala_target_value_type_id);
294 }
295 return vala_target_value_type_id__volatile;
296 }
297
298 gpointer
vala_target_value_ref(gpointer instance)299 vala_target_value_ref (gpointer instance)
300 {
301 ValaTargetValue * self;
302 self = instance;
303 g_atomic_int_inc (&self->ref_count);
304 return instance;
305 }
306
307 void
vala_target_value_unref(gpointer instance)308 vala_target_value_unref (gpointer instance)
309 {
310 ValaTargetValue * self;
311 self = instance;
312 if (g_atomic_int_dec_and_test (&self->ref_count)) {
313 VALA_TARGET_VALUE_GET_CLASS (self)->finalize (self);
314 g_type_free_instance ((GTypeInstance *) self);
315 }
316 }
317
318