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