gvaluetypes.c revision 1e46cf8099b2d4575286d5a9272aa8f4be056a57
109f8e937f21552d441a5a2b06767a67459195653Tim Janik/* GObject - GLib Type, Object, Parameter and Signal Library
209f8e937f21552d441a5a2b06767a67459195653Tim Janik * Copyright (C) 1997, 1998, 1999, 2000 Tim Janik and Red Hat, Inc.
309f8e937f21552d441a5a2b06767a67459195653Tim Janik *
409f8e937f21552d441a5a2b06767a67459195653Tim Janik * This library is free software; you can redistribute it and/or
509f8e937f21552d441a5a2b06767a67459195653Tim Janik * modify it under the terms of the GNU Lesser General Public
609f8e937f21552d441a5a2b06767a67459195653Tim Janik * License as published by the Free Software Foundation; either
709f8e937f21552d441a5a2b06767a67459195653Tim Janik * version 2 of the License, or (at your option) any later version.
809f8e937f21552d441a5a2b06767a67459195653Tim Janik *
909f8e937f21552d441a5a2b06767a67459195653Tim Janik * This library is distributed in the hope that it will be useful,
1009f8e937f21552d441a5a2b06767a67459195653Tim Janik * but WITHOUT ANY WARRANTY; without even the implied warranty of
1109f8e937f21552d441a5a2b06767a67459195653Tim Janik * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
1209f8e937f21552d441a5a2b06767a67459195653Tim Janik * Lesser General Public License for more details.
1309f8e937f21552d441a5a2b06767a67459195653Tim Janik *
1409f8e937f21552d441a5a2b06767a67459195653Tim Janik * You should have received a copy of the GNU Lesser General
1509f8e937f21552d441a5a2b06767a67459195653Tim Janik * Public License along with this library; if not, write to the
1609f8e937f21552d441a5a2b06767a67459195653Tim Janik * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
1709f8e937f21552d441a5a2b06767a67459195653Tim Janik * Boston, MA 02111-1307, USA.
1809f8e937f21552d441a5a2b06767a67459195653Tim Janik */
1909f8e937f21552d441a5a2b06767a67459195653Tim Janik#include	"gvaluetypes.h"
2009f8e937f21552d441a5a2b06767a67459195653Tim Janik
2109f8e937f21552d441a5a2b06767a67459195653Tim Janik#include	"gvaluecollector.h"
2209f8e937f21552d441a5a2b06767a67459195653Tim Janik#include	<string.h>
2309f8e937f21552d441a5a2b06767a67459195653Tim Janik
2409f8e937f21552d441a5a2b06767a67459195653Tim Janik
2509f8e937f21552d441a5a2b06767a67459195653Tim Janik/* --- value functions --- */
2609f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic void
2709f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_long0_init (GValue *value)
2809f8e937f21552d441a5a2b06767a67459195653Tim Janik{
2909f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_long = 0;
3009f8e937f21552d441a5a2b06767a67459195653Tim Janik}
3109f8e937f21552d441a5a2b06767a67459195653Tim Janik
3209f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic void
3309f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_long0_copy (const GValue *src_value,
3409f8e937f21552d441a5a2b06767a67459195653Tim Janik		  GValue       *dest_value)
3509f8e937f21552d441a5a2b06767a67459195653Tim Janik{
3609f8e937f21552d441a5a2b06767a67459195653Tim Janik  dest_value->data[0].v_long = src_value->data[0].v_long;
3709f8e937f21552d441a5a2b06767a67459195653Tim Janik}
3809f8e937f21552d441a5a2b06767a67459195653Tim Janik
3909f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic gchar*
4009f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_char_lcopy_value (const GValue *value,
4109f8e937f21552d441a5a2b06767a67459195653Tim Janik			guint	      nth_value,
4209f8e937f21552d441a5a2b06767a67459195653Tim Janik			GType	     *collect_type,
4309f8e937f21552d441a5a2b06767a67459195653Tim Janik			GTypeCValue  *collect_value)
4409f8e937f21552d441a5a2b06767a67459195653Tim Janik{
4509f8e937f21552d441a5a2b06767a67459195653Tim Janik  gint8 *int8_p = collect_value->v_pointer;
4609f8e937f21552d441a5a2b06767a67459195653Tim Janik
4709f8e937f21552d441a5a2b06767a67459195653Tim Janik  if (!int8_p)
4809f8e937f21552d441a5a2b06767a67459195653Tim Janik    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
4909f8e937f21552d441a5a2b06767a67459195653Tim Janik
5009f8e937f21552d441a5a2b06767a67459195653Tim Janik  *int8_p = value->data[0].v_int;
5109f8e937f21552d441a5a2b06767a67459195653Tim Janik
5209f8e937f21552d441a5a2b06767a67459195653Tim Janik  *collect_type = 0;
5309f8e937f21552d441a5a2b06767a67459195653Tim Janik  return NULL;
5409f8e937f21552d441a5a2b06767a67459195653Tim Janik}
5509f8e937f21552d441a5a2b06767a67459195653Tim Janik
5609f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic gchar*
5709f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_boolean_lcopy_value (const GValue *value,
5809f8e937f21552d441a5a2b06767a67459195653Tim Janik			   guint	 nth_value,
5909f8e937f21552d441a5a2b06767a67459195653Tim Janik			   GType	*collect_type,
6009f8e937f21552d441a5a2b06767a67459195653Tim Janik			   GTypeCValue	*collect_value)
6109f8e937f21552d441a5a2b06767a67459195653Tim Janik{
6209f8e937f21552d441a5a2b06767a67459195653Tim Janik  gboolean *bool_p = collect_value->v_pointer;
6309f8e937f21552d441a5a2b06767a67459195653Tim Janik
6409f8e937f21552d441a5a2b06767a67459195653Tim Janik  if (!bool_p)
6509f8e937f21552d441a5a2b06767a67459195653Tim Janik    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
6609f8e937f21552d441a5a2b06767a67459195653Tim Janik
6709f8e937f21552d441a5a2b06767a67459195653Tim Janik  *bool_p = value->data[0].v_int;
6809f8e937f21552d441a5a2b06767a67459195653Tim Janik
6909f8e937f21552d441a5a2b06767a67459195653Tim Janik  *collect_type = 0;
7009f8e937f21552d441a5a2b06767a67459195653Tim Janik  return NULL;
7109f8e937f21552d441a5a2b06767a67459195653Tim Janik}
7209f8e937f21552d441a5a2b06767a67459195653Tim Janik
7309f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic gchar*
7409f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_int_collect_value (GValue	     *value,
7509f8e937f21552d441a5a2b06767a67459195653Tim Janik			 guint	      nth_value,
7609f8e937f21552d441a5a2b06767a67459195653Tim Janik			 GType	     *collect_type,
7709f8e937f21552d441a5a2b06767a67459195653Tim Janik			 GTypeCValue *collect_value)
7809f8e937f21552d441a5a2b06767a67459195653Tim Janik{
7909f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_int = collect_value->v_int;
8009f8e937f21552d441a5a2b06767a67459195653Tim Janik
8109f8e937f21552d441a5a2b06767a67459195653Tim Janik  *collect_type = 0;
8209f8e937f21552d441a5a2b06767a67459195653Tim Janik  return NULL;
8309f8e937f21552d441a5a2b06767a67459195653Tim Janik}
8409f8e937f21552d441a5a2b06767a67459195653Tim Janik
8509f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic gchar*
8609f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_int_lcopy_value (const GValue *value,
8709f8e937f21552d441a5a2b06767a67459195653Tim Janik		       guint	     nth_value,
8809f8e937f21552d441a5a2b06767a67459195653Tim Janik		       GType	    *collect_type,
8909f8e937f21552d441a5a2b06767a67459195653Tim Janik		       GTypeCValue  *collect_value)
9009f8e937f21552d441a5a2b06767a67459195653Tim Janik{
9109f8e937f21552d441a5a2b06767a67459195653Tim Janik  gint *int_p = collect_value->v_pointer;
9209f8e937f21552d441a5a2b06767a67459195653Tim Janik
9309f8e937f21552d441a5a2b06767a67459195653Tim Janik  if (!int_p)
9409f8e937f21552d441a5a2b06767a67459195653Tim Janik    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
9509f8e937f21552d441a5a2b06767a67459195653Tim Janik
9609f8e937f21552d441a5a2b06767a67459195653Tim Janik  *int_p = value->data[0].v_int;
9709f8e937f21552d441a5a2b06767a67459195653Tim Janik
9809f8e937f21552d441a5a2b06767a67459195653Tim Janik  *collect_type = 0;
9909f8e937f21552d441a5a2b06767a67459195653Tim Janik  return NULL;
10009f8e937f21552d441a5a2b06767a67459195653Tim Janik}
10109f8e937f21552d441a5a2b06767a67459195653Tim Janik
10209f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic gchar*
10309f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_long_collect_value (GValue      *value,
10409f8e937f21552d441a5a2b06767a67459195653Tim Janik			  guint	       nth_value,
10509f8e937f21552d441a5a2b06767a67459195653Tim Janik			  GType	      *collect_type,
10609f8e937f21552d441a5a2b06767a67459195653Tim Janik			  GTypeCValue *collect_value)
10709f8e937f21552d441a5a2b06767a67459195653Tim Janik{
10809f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_long = collect_value->v_long;
10909f8e937f21552d441a5a2b06767a67459195653Tim Janik
11009f8e937f21552d441a5a2b06767a67459195653Tim Janik  *collect_type = 0;
11109f8e937f21552d441a5a2b06767a67459195653Tim Janik  return NULL;
11209f8e937f21552d441a5a2b06767a67459195653Tim Janik}
11309f8e937f21552d441a5a2b06767a67459195653Tim Janik
11409f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic gchar*
11509f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_long_lcopy_value (const GValue *value,
11609f8e937f21552d441a5a2b06767a67459195653Tim Janik			guint	      nth_value,
11709f8e937f21552d441a5a2b06767a67459195653Tim Janik			GType	     *collect_type,
11809f8e937f21552d441a5a2b06767a67459195653Tim Janik			GTypeCValue  *collect_value)
11909f8e937f21552d441a5a2b06767a67459195653Tim Janik{
12009f8e937f21552d441a5a2b06767a67459195653Tim Janik  glong *long_p = collect_value->v_pointer;
12109f8e937f21552d441a5a2b06767a67459195653Tim Janik
12209f8e937f21552d441a5a2b06767a67459195653Tim Janik  if (!long_p)
12309f8e937f21552d441a5a2b06767a67459195653Tim Janik    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
12409f8e937f21552d441a5a2b06767a67459195653Tim Janik
12509f8e937f21552d441a5a2b06767a67459195653Tim Janik  *long_p = value->data[0].v_long;
12609f8e937f21552d441a5a2b06767a67459195653Tim Janik
12709f8e937f21552d441a5a2b06767a67459195653Tim Janik  *collect_type = 0;
12809f8e937f21552d441a5a2b06767a67459195653Tim Janik  return NULL;
12909f8e937f21552d441a5a2b06767a67459195653Tim Janik}
13009f8e937f21552d441a5a2b06767a67459195653Tim Janik
13109f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic void
13209f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_float_init (GValue *value)
13309f8e937f21552d441a5a2b06767a67459195653Tim Janik{
13409f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_float = 0.0;
13509f8e937f21552d441a5a2b06767a67459195653Tim Janik}
13609f8e937f21552d441a5a2b06767a67459195653Tim Janik
13709f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic void
13809f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_float_copy (const GValue *src_value,
13909f8e937f21552d441a5a2b06767a67459195653Tim Janik		  GValue       *dest_value)
14009f8e937f21552d441a5a2b06767a67459195653Tim Janik{
14109f8e937f21552d441a5a2b06767a67459195653Tim Janik  dest_value->data[0].v_float = src_value->data[0].v_float;
14209f8e937f21552d441a5a2b06767a67459195653Tim Janik}
14309f8e937f21552d441a5a2b06767a67459195653Tim Janik
14409f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic gchar*
14509f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_float_collect_value (GValue      *value,
14609f8e937f21552d441a5a2b06767a67459195653Tim Janik			   guint	nth_value,
14709f8e937f21552d441a5a2b06767a67459195653Tim Janik			   GType       *collect_type,
14809f8e937f21552d441a5a2b06767a67459195653Tim Janik			   GTypeCValue *collect_value)
14909f8e937f21552d441a5a2b06767a67459195653Tim Janik{
15009f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_float = collect_value->v_double;
15109f8e937f21552d441a5a2b06767a67459195653Tim Janik
15209f8e937f21552d441a5a2b06767a67459195653Tim Janik  *collect_type = 0;
15309f8e937f21552d441a5a2b06767a67459195653Tim Janik  return NULL;
15409f8e937f21552d441a5a2b06767a67459195653Tim Janik}
15509f8e937f21552d441a5a2b06767a67459195653Tim Janik
15609f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic gchar*
15709f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_float_lcopy_value (const GValue *value,
15809f8e937f21552d441a5a2b06767a67459195653Tim Janik			 guint	       nth_value,
15909f8e937f21552d441a5a2b06767a67459195653Tim Janik			 GType	      *collect_type,
16009f8e937f21552d441a5a2b06767a67459195653Tim Janik			 GTypeCValue  *collect_value)
16109f8e937f21552d441a5a2b06767a67459195653Tim Janik{
16209f8e937f21552d441a5a2b06767a67459195653Tim Janik  gfloat *float_p = collect_value->v_pointer;
16309f8e937f21552d441a5a2b06767a67459195653Tim Janik
16409f8e937f21552d441a5a2b06767a67459195653Tim Janik  if (!float_p)
16509f8e937f21552d441a5a2b06767a67459195653Tim Janik    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
16609f8e937f21552d441a5a2b06767a67459195653Tim Janik
16709f8e937f21552d441a5a2b06767a67459195653Tim Janik  *float_p = value->data[0].v_float;
16809f8e937f21552d441a5a2b06767a67459195653Tim Janik
16909f8e937f21552d441a5a2b06767a67459195653Tim Janik  *collect_type = 0;
17009f8e937f21552d441a5a2b06767a67459195653Tim Janik  return NULL;
17109f8e937f21552d441a5a2b06767a67459195653Tim Janik}
17209f8e937f21552d441a5a2b06767a67459195653Tim Janik
17309f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic void
17409f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_double_init (GValue *value)
17509f8e937f21552d441a5a2b06767a67459195653Tim Janik{
17609f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_double = 0.0;
17709f8e937f21552d441a5a2b06767a67459195653Tim Janik}
17809f8e937f21552d441a5a2b06767a67459195653Tim Janik
17909f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic void
18009f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_double_copy (const GValue *src_value,
18109f8e937f21552d441a5a2b06767a67459195653Tim Janik		   GValue	*dest_value)
18209f8e937f21552d441a5a2b06767a67459195653Tim Janik{
18309f8e937f21552d441a5a2b06767a67459195653Tim Janik  dest_value->data[0].v_double = src_value->data[0].v_double;
18409f8e937f21552d441a5a2b06767a67459195653Tim Janik}
18509f8e937f21552d441a5a2b06767a67459195653Tim Janik
18609f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic gchar*
18709f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_double_collect_value (GValue	*value,
18809f8e937f21552d441a5a2b06767a67459195653Tim Janik			    guint	 nth_value,
18909f8e937f21552d441a5a2b06767a67459195653Tim Janik			    GType	*collect_type,
19009f8e937f21552d441a5a2b06767a67459195653Tim Janik			    GTypeCValue *collect_value)
19109f8e937f21552d441a5a2b06767a67459195653Tim Janik{
19209f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_double = collect_value->v_double;
19309f8e937f21552d441a5a2b06767a67459195653Tim Janik
19409f8e937f21552d441a5a2b06767a67459195653Tim Janik  *collect_type = 0;
19509f8e937f21552d441a5a2b06767a67459195653Tim Janik  return NULL;
19609f8e937f21552d441a5a2b06767a67459195653Tim Janik}
19709f8e937f21552d441a5a2b06767a67459195653Tim Janik
19809f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic gchar*
19909f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_double_lcopy_value (const GValue *value,
20009f8e937f21552d441a5a2b06767a67459195653Tim Janik			  guint		nth_value,
20109f8e937f21552d441a5a2b06767a67459195653Tim Janik			  GType	       *collect_type,
20209f8e937f21552d441a5a2b06767a67459195653Tim Janik			  GTypeCValue  *collect_value)
20309f8e937f21552d441a5a2b06767a67459195653Tim Janik{
20409f8e937f21552d441a5a2b06767a67459195653Tim Janik  gdouble *double_p = collect_value->v_pointer;
20509f8e937f21552d441a5a2b06767a67459195653Tim Janik
20609f8e937f21552d441a5a2b06767a67459195653Tim Janik  if (!double_p)
20709f8e937f21552d441a5a2b06767a67459195653Tim Janik    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
20809f8e937f21552d441a5a2b06767a67459195653Tim Janik
20909f8e937f21552d441a5a2b06767a67459195653Tim Janik  *double_p = value->data[0].v_double;
21009f8e937f21552d441a5a2b06767a67459195653Tim Janik
21109f8e937f21552d441a5a2b06767a67459195653Tim Janik  *collect_type = 0;
21209f8e937f21552d441a5a2b06767a67459195653Tim Janik  return NULL;
21309f8e937f21552d441a5a2b06767a67459195653Tim Janik}
21409f8e937f21552d441a5a2b06767a67459195653Tim Janik
21509f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic void
21609f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_string_init (GValue *value)
21709f8e937f21552d441a5a2b06767a67459195653Tim Janik{
21809f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_pointer = NULL;
21909f8e937f21552d441a5a2b06767a67459195653Tim Janik}
22009f8e937f21552d441a5a2b06767a67459195653Tim Janik
22109f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic void
22209f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_string_free_value (GValue *value)
22309f8e937f21552d441a5a2b06767a67459195653Tim Janik{
224900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik  if (!(value->data[1].v_uint & G_VALUE_STATIC_TAG))
225900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik    g_free (value->data[0].v_pointer);
22609f8e937f21552d441a5a2b06767a67459195653Tim Janik}
22709f8e937f21552d441a5a2b06767a67459195653Tim Janik
22809f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic void
22909f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_string_copy_value (const GValue *src_value,
23009f8e937f21552d441a5a2b06767a67459195653Tim Janik			 GValue	      *dest_value)
23109f8e937f21552d441a5a2b06767a67459195653Tim Janik{
23209f8e937f21552d441a5a2b06767a67459195653Tim Janik  dest_value->data[0].v_pointer = g_strdup (src_value->data[0].v_pointer);
23309f8e937f21552d441a5a2b06767a67459195653Tim Janik}
23409f8e937f21552d441a5a2b06767a67459195653Tim Janik
23509f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic gchar*
23609f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_string_collect_value (GValue	*value,
23709f8e937f21552d441a5a2b06767a67459195653Tim Janik			    guint	 nth_value,
23809f8e937f21552d441a5a2b06767a67459195653Tim Janik			    GType	*collect_type,
23909f8e937f21552d441a5a2b06767a67459195653Tim Janik			    GTypeCValue *collect_value)
24009f8e937f21552d441a5a2b06767a67459195653Tim Janik{
24109f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_pointer = g_strdup (collect_value->v_pointer);
24209f8e937f21552d441a5a2b06767a67459195653Tim Janik
24309f8e937f21552d441a5a2b06767a67459195653Tim Janik  *collect_type = 0;
24409f8e937f21552d441a5a2b06767a67459195653Tim Janik  return NULL;
24509f8e937f21552d441a5a2b06767a67459195653Tim Janik}
24609f8e937f21552d441a5a2b06767a67459195653Tim Janik
24709f8e937f21552d441a5a2b06767a67459195653Tim Janikstatic gchar*
24809f8e937f21552d441a5a2b06767a67459195653Tim Janikvalue_string_lcopy_value (const GValue *value,
24909f8e937f21552d441a5a2b06767a67459195653Tim Janik			  guint		nth_value,
25009f8e937f21552d441a5a2b06767a67459195653Tim Janik			  GType	       *collect_type,
25109f8e937f21552d441a5a2b06767a67459195653Tim Janik			  GTypeCValue  *collect_value)
25209f8e937f21552d441a5a2b06767a67459195653Tim Janik{
25309f8e937f21552d441a5a2b06767a67459195653Tim Janik  gchar **string_p = collect_value->v_pointer;
25409f8e937f21552d441a5a2b06767a67459195653Tim Janik
25509f8e937f21552d441a5a2b06767a67459195653Tim Janik  if (!string_p)
25609f8e937f21552d441a5a2b06767a67459195653Tim Janik    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
25709f8e937f21552d441a5a2b06767a67459195653Tim Janik
25809f8e937f21552d441a5a2b06767a67459195653Tim Janik  *string_p = g_strdup (value->data[0].v_pointer);
25909f8e937f21552d441a5a2b06767a67459195653Tim Janik
26009f8e937f21552d441a5a2b06767a67459195653Tim Janik  *collect_type = 0;
26109f8e937f21552d441a5a2b06767a67459195653Tim Janik  return NULL;
26209f8e937f21552d441a5a2b06767a67459195653Tim Janik}
26309f8e937f21552d441a5a2b06767a67459195653Tim Janik
264ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikstatic void
265ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikvalue_pointer_init (GValue *value)
266ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik{
267ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  value->data[0].v_pointer = 0;
268ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik}
269ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
270ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikstatic void
271ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikvalue_pointer_copy (const GValue *src_value,
272ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik		    GValue       *dest_value)
273ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik{
274ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  dest_value->data[0].v_pointer = src_value->data[0].v_pointer;
275ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik}
276ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
277ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikstatic gpointer
278ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikvalue_pointer_peek_pointer (const GValue *value)
279ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik{
280ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  return value->data[0].v_pointer;
281ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik}
282ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
283ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikstatic gchar*
284ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikvalue_pointer_collect_value (GValue      *value,
285ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik			     guint        nth_value,
286ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik			     GType       *collect_type,
287ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik			     GTypeCValue *collect_value)
288ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik{
289ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  value->data[0].v_pointer = collect_value->v_pointer;
290ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
291ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  *collect_type = 0;
292ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  return NULL;
293ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik}
294ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
295ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikstatic gchar*
296ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikvalue_pointer_lcopy_value (const GValue *value,
297ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik			   guint         nth_value,
298ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik			   GType        *collect_type,
299ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik			   GTypeCValue  *collect_value)
300ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik{
301ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  gpointer *pointer_p = collect_value->v_pointer;
302ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
303ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  if (!pointer_p)
304ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
305ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
306ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  *pointer_p = value->data[0].v_pointer;
307ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
308ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  *collect_type = 0;
309ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  return NULL;
310ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik}
311ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
31209f8e937f21552d441a5a2b06767a67459195653Tim Janik
31309f8e937f21552d441a5a2b06767a67459195653Tim Janik/* --- type initialization --- */
31409f8e937f21552d441a5a2b06767a67459195653Tim Janikvoid
31509f8e937f21552d441a5a2b06767a67459195653Tim Janikg_value_types_init (void)  /* sync with gtype.c */
31609f8e937f21552d441a5a2b06767a67459195653Tim Janik{
31709f8e937f21552d441a5a2b06767a67459195653Tim Janik  GTypeInfo info = {
31809f8e937f21552d441a5a2b06767a67459195653Tim Janik    0,				/* class_size */
31909f8e937f21552d441a5a2b06767a67459195653Tim Janik    NULL,			/* base_init */
32009f8e937f21552d441a5a2b06767a67459195653Tim Janik    NULL,			/* base_destroy */
32109f8e937f21552d441a5a2b06767a67459195653Tim Janik    NULL,			/* class_init */
32209f8e937f21552d441a5a2b06767a67459195653Tim Janik    NULL,			/* class_destroy */
32309f8e937f21552d441a5a2b06767a67459195653Tim Janik    NULL,			/* class_data */
32409f8e937f21552d441a5a2b06767a67459195653Tim Janik    0,				/* instance_size */
32509f8e937f21552d441a5a2b06767a67459195653Tim Janik    0,				/* n_preallocs */
32609f8e937f21552d441a5a2b06767a67459195653Tim Janik    NULL,			/* instance_init */
32709f8e937f21552d441a5a2b06767a67459195653Tim Janik    NULL,			/* value_table */
32809f8e937f21552d441a5a2b06767a67459195653Tim Janik  };
32909f8e937f21552d441a5a2b06767a67459195653Tim Janik  const GTypeFundamentalInfo finfo = { G_TYPE_FLAG_DERIVABLE, };
33009f8e937f21552d441a5a2b06767a67459195653Tim Janik  GType type;
33109f8e937f21552d441a5a2b06767a67459195653Tim Janik
33209f8e937f21552d441a5a2b06767a67459195653Tim Janik  /* G_TYPE_CHAR / G_TYPE_UCHAR
33309f8e937f21552d441a5a2b06767a67459195653Tim Janik   */
33409f8e937f21552d441a5a2b06767a67459195653Tim Janik  {
33509f8e937f21552d441a5a2b06767a67459195653Tim Janik    static const GTypeValueTable value_table = {
33609f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_long0_init,		/* value_init */
33709f8e937f21552d441a5a2b06767a67459195653Tim Janik      NULL,			/* value_free */
33809f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_long0_copy,		/* value_copy */
339ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      NULL,			/* value_peek_pointer */
34009f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_INT,	/* collect_type */
34109f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_int_collect_value,	/* collect_value */
34209f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_POINTER,	/* lcopy_type */
34309f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_char_lcopy_value,	/* lcopy_value */
34409f8e937f21552d441a5a2b06767a67459195653Tim Janik    };
34509f8e937f21552d441a5a2b06767a67459195653Tim Janik    info.value_table = &value_table;
346ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    type = g_type_register_fundamental (G_TYPE_CHAR, "gchar", &info, &finfo, 0);
34709f8e937f21552d441a5a2b06767a67459195653Tim Janik    g_assert (type == G_TYPE_CHAR);
348ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    type = g_type_register_fundamental (G_TYPE_UCHAR, "guchar", &info, &finfo, 0);
34909f8e937f21552d441a5a2b06767a67459195653Tim Janik    g_assert (type == G_TYPE_UCHAR);
35009f8e937f21552d441a5a2b06767a67459195653Tim Janik  }
35109f8e937f21552d441a5a2b06767a67459195653Tim Janik
35209f8e937f21552d441a5a2b06767a67459195653Tim Janik  /* G_TYPE_BOOLEAN
35309f8e937f21552d441a5a2b06767a67459195653Tim Janik   */
35409f8e937f21552d441a5a2b06767a67459195653Tim Janik  {
35509f8e937f21552d441a5a2b06767a67459195653Tim Janik    static const GTypeValueTable value_table = {
35609f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_long0_init,		 /* value_init */
35709f8e937f21552d441a5a2b06767a67459195653Tim Janik      NULL,			 /* value_free */
35809f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_long0_copy,		 /* value_copy */
359ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      NULL,                      /* value_peek_pointer */
36009f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_INT,	 /* collect_type */
36109f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_int_collect_value,	 /* collect_value */
36209f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_POINTER,	 /* lcopy_type */
36309f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_boolean_lcopy_value, /* lcopy_value */
36409f8e937f21552d441a5a2b06767a67459195653Tim Janik    };
36509f8e937f21552d441a5a2b06767a67459195653Tim Janik    info.value_table = &value_table;
366ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    type = g_type_register_fundamental (G_TYPE_BOOLEAN, "gboolean", &info, &finfo, 0);
36709f8e937f21552d441a5a2b06767a67459195653Tim Janik    g_assert (type == G_TYPE_BOOLEAN);
36809f8e937f21552d441a5a2b06767a67459195653Tim Janik  }
36909f8e937f21552d441a5a2b06767a67459195653Tim Janik
37009f8e937f21552d441a5a2b06767a67459195653Tim Janik  /* G_TYPE_INT / G_TYPE_UINT
37109f8e937f21552d441a5a2b06767a67459195653Tim Janik   */
37209f8e937f21552d441a5a2b06767a67459195653Tim Janik  {
37309f8e937f21552d441a5a2b06767a67459195653Tim Janik    static const GTypeValueTable value_table = {
37409f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_long0_init,		/* value_init */
37509f8e937f21552d441a5a2b06767a67459195653Tim Janik      NULL,			/* value_free */
37609f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_long0_copy,		/* value_copy */
377ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      NULL,                     /* value_peek_pointer */
37809f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_INT,	/* collect_type */
37909f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_int_collect_value,	/* collect_value */
38009f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_POINTER,	/* lcopy_type */
38109f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_int_lcopy_value,	/* lcopy_value */
38209f8e937f21552d441a5a2b06767a67459195653Tim Janik    };
38309f8e937f21552d441a5a2b06767a67459195653Tim Janik    info.value_table = &value_table;
384ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    type = g_type_register_fundamental (G_TYPE_INT, "gint", &info, &finfo, 0);
38509f8e937f21552d441a5a2b06767a67459195653Tim Janik    g_assert (type == G_TYPE_INT);
386ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    type = g_type_register_fundamental (G_TYPE_UINT, "guint", &info, &finfo, 0);
38709f8e937f21552d441a5a2b06767a67459195653Tim Janik    g_assert (type == G_TYPE_UINT);
38809f8e937f21552d441a5a2b06767a67459195653Tim Janik  }
38909f8e937f21552d441a5a2b06767a67459195653Tim Janik
39009f8e937f21552d441a5a2b06767a67459195653Tim Janik  /* G_TYPE_LONG / G_TYPE_ULONG
39109f8e937f21552d441a5a2b06767a67459195653Tim Janik   */
39209f8e937f21552d441a5a2b06767a67459195653Tim Janik  {
39309f8e937f21552d441a5a2b06767a67459195653Tim Janik    static const GTypeValueTable value_table = {
39409f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_long0_init,		/* value_init */
39509f8e937f21552d441a5a2b06767a67459195653Tim Janik      NULL,			/* value_free */
39609f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_long0_copy,		/* value_copy */
397ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      NULL,                     /* value_peek_pointer */
39809f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_LONG,	/* collect_type */
39909f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_long_collect_value,	/* collect_value */
40009f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_POINTER,	/* lcopy_type */
40109f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_long_lcopy_value,	/* lcopy_value */
40209f8e937f21552d441a5a2b06767a67459195653Tim Janik    };
40309f8e937f21552d441a5a2b06767a67459195653Tim Janik    info.value_table = &value_table;
404ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    type = g_type_register_fundamental (G_TYPE_LONG, "glong", &info, &finfo, 0);
40509f8e937f21552d441a5a2b06767a67459195653Tim Janik    g_assert (type == G_TYPE_LONG);
406ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    type = g_type_register_fundamental (G_TYPE_ULONG, "gulong", &info, &finfo, 0);
40709f8e937f21552d441a5a2b06767a67459195653Tim Janik    g_assert (type == G_TYPE_ULONG);
40809f8e937f21552d441a5a2b06767a67459195653Tim Janik  }
40909f8e937f21552d441a5a2b06767a67459195653Tim Janik
41009f8e937f21552d441a5a2b06767a67459195653Tim Janik  /* G_TYPE_FLOAT
41109f8e937f21552d441a5a2b06767a67459195653Tim Janik   */
41209f8e937f21552d441a5a2b06767a67459195653Tim Janik  {
41309f8e937f21552d441a5a2b06767a67459195653Tim Janik    static const GTypeValueTable value_table = {
41409f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_float_init,		 /* value_init */
41509f8e937f21552d441a5a2b06767a67459195653Tim Janik      NULL,			 /* value_free */
41609f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_float_copy,		 /* value_copy */
417ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      NULL,                      /* value_peek_pointer */
41809f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_DOUBLE,	 /* collect_type */
41909f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_float_collect_value, /* collect_value */
42009f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_POINTER,	 /* lcopy_type */
42109f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_float_lcopy_value,	 /* lcopy_value */
42209f8e937f21552d441a5a2b06767a67459195653Tim Janik    };
42309f8e937f21552d441a5a2b06767a67459195653Tim Janik    info.value_table = &value_table;
424ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    type = g_type_register_fundamental (G_TYPE_FLOAT, "gfloat", &info, &finfo, 0);
42509f8e937f21552d441a5a2b06767a67459195653Tim Janik    g_assert (type == G_TYPE_FLOAT);
42609f8e937f21552d441a5a2b06767a67459195653Tim Janik  }
42709f8e937f21552d441a5a2b06767a67459195653Tim Janik
42809f8e937f21552d441a5a2b06767a67459195653Tim Janik  /* G_TYPE_DOUBLE
42909f8e937f21552d441a5a2b06767a67459195653Tim Janik   */
43009f8e937f21552d441a5a2b06767a67459195653Tim Janik  {
43109f8e937f21552d441a5a2b06767a67459195653Tim Janik    static const GTypeValueTable value_table = {
43209f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_double_init,	  /* value_init */
43309f8e937f21552d441a5a2b06767a67459195653Tim Janik      NULL,			  /* value_free */
43409f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_double_copy,	  /* value_copy */
435ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      NULL,                       /* value_peek_pointer */
43609f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_DOUBLE,	  /* collect_type */
43709f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_double_collect_value, /* collect_value */
43809f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_POINTER,	  /* lcopy_type */
43909f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_double_lcopy_value,	  /* lcopy_value */
44009f8e937f21552d441a5a2b06767a67459195653Tim Janik    };
44109f8e937f21552d441a5a2b06767a67459195653Tim Janik    info.value_table = &value_table;
442ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    type = g_type_register_fundamental (G_TYPE_DOUBLE, "gdouble", &info, &finfo, 0);
44309f8e937f21552d441a5a2b06767a67459195653Tim Janik    g_assert (type == G_TYPE_DOUBLE);
44409f8e937f21552d441a5a2b06767a67459195653Tim Janik  }
44509f8e937f21552d441a5a2b06767a67459195653Tim Janik
44609f8e937f21552d441a5a2b06767a67459195653Tim Janik  /* G_TYPE_STRING
44709f8e937f21552d441a5a2b06767a67459195653Tim Janik   */
44809f8e937f21552d441a5a2b06767a67459195653Tim Janik  {
44909f8e937f21552d441a5a2b06767a67459195653Tim Janik    static const GTypeValueTable value_table = {
45009f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_string_init,	  /* value_init */
45109f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_string_free_value,	  /* value_free */
45209f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_string_copy_value,	  /* value_copy */
453ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      value_pointer_peek_pointer, /* value_peek_pointer */
45409f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_POINTER,	  /* collect_type */
45509f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_string_collect_value, /* collect_value */
45609f8e937f21552d441a5a2b06767a67459195653Tim Janik      G_VALUE_COLLECT_POINTER,	  /* lcopy_type */
45709f8e937f21552d441a5a2b06767a67459195653Tim Janik      value_string_lcopy_value,	  /* lcopy_value */
45809f8e937f21552d441a5a2b06767a67459195653Tim Janik    };
45909f8e937f21552d441a5a2b06767a67459195653Tim Janik    info.value_table = &value_table;
460ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    type = g_type_register_fundamental (G_TYPE_STRING, "gstring", &info, &finfo, 0);
46109f8e937f21552d441a5a2b06767a67459195653Tim Janik    g_assert (type == G_TYPE_STRING);
46209f8e937f21552d441a5a2b06767a67459195653Tim Janik  }
463ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
464ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  /* G_TYPE_POINTER
465ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik   */
466ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  {
467ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    static const GTypeValueTable value_table = {
468ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      value_pointer_init,          /* value_init */
469ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      NULL,                        /* value_free */
470ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      value_pointer_copy,          /* value_copy */
471ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      value_pointer_peek_pointer,  /* value_peek_pointer */
472ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      G_VALUE_COLLECT_POINTER,     /* collect_type */
473ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      value_pointer_collect_value, /* collect_value */
474ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      G_VALUE_COLLECT_POINTER,     /* lcopy_type */
475ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik      value_pointer_lcopy_value,   /* lcopy_value */
476ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    };
477ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    info.value_table = &value_table;
478ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    type = g_type_register_fundamental (G_TYPE_POINTER, "gpointer", &info, &finfo, 0);
479ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik    g_assert (type == G_TYPE_POINTER);
480ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  }
48109f8e937f21552d441a5a2b06767a67459195653Tim Janik}
48209f8e937f21552d441a5a2b06767a67459195653Tim Janik
48309f8e937f21552d441a5a2b06767a67459195653Tim Janik
48409f8e937f21552d441a5a2b06767a67459195653Tim Janik/* --- GValue functions --- */
48509f8e937f21552d441a5a2b06767a67459195653Tim Janikvoid
48609f8e937f21552d441a5a2b06767a67459195653Tim Janikg_value_set_char (GValue *value,
48709f8e937f21552d441a5a2b06767a67459195653Tim Janik		  gint8	  v_char)
48809f8e937f21552d441a5a2b06767a67459195653Tim Janik{
48909f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_if_fail (G_IS_VALUE_CHAR (value));
49009f8e937f21552d441a5a2b06767a67459195653Tim Janik
49109f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_int = v_char;
49209f8e937f21552d441a5a2b06767a67459195653Tim Janik}
49309f8e937f21552d441a5a2b06767a67459195653Tim Janik
49409f8e937f21552d441a5a2b06767a67459195653Tim Janikgint8
495ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikg_value_get_char (const GValue *value)
49609f8e937f21552d441a5a2b06767a67459195653Tim Janik{
49709f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_val_if_fail (G_IS_VALUE_CHAR (value), 0);
49809f8e937f21552d441a5a2b06767a67459195653Tim Janik
49909f8e937f21552d441a5a2b06767a67459195653Tim Janik  return value->data[0].v_int;
50009f8e937f21552d441a5a2b06767a67459195653Tim Janik}
50109f8e937f21552d441a5a2b06767a67459195653Tim Janik
50209f8e937f21552d441a5a2b06767a67459195653Tim Janikvoid
50309f8e937f21552d441a5a2b06767a67459195653Tim Janikg_value_set_uchar (GValue *value,
50409f8e937f21552d441a5a2b06767a67459195653Tim Janik		   guint8  v_uchar)
50509f8e937f21552d441a5a2b06767a67459195653Tim Janik{
50609f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_if_fail (G_IS_VALUE_UCHAR (value));
50709f8e937f21552d441a5a2b06767a67459195653Tim Janik
50809f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_uint = v_uchar;
50909f8e937f21552d441a5a2b06767a67459195653Tim Janik}
51009f8e937f21552d441a5a2b06767a67459195653Tim Janik
51109f8e937f21552d441a5a2b06767a67459195653Tim Janikguint8
512ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikg_value_get_uchar (const GValue *value)
51309f8e937f21552d441a5a2b06767a67459195653Tim Janik{
51409f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_val_if_fail (G_IS_VALUE_UCHAR (value), 0);
51509f8e937f21552d441a5a2b06767a67459195653Tim Janik
51609f8e937f21552d441a5a2b06767a67459195653Tim Janik  return value->data[0].v_uint;
51709f8e937f21552d441a5a2b06767a67459195653Tim Janik}
51809f8e937f21552d441a5a2b06767a67459195653Tim Janik
51909f8e937f21552d441a5a2b06767a67459195653Tim Janikvoid
52009f8e937f21552d441a5a2b06767a67459195653Tim Janikg_value_set_boolean (GValue  *value,
52109f8e937f21552d441a5a2b06767a67459195653Tim Janik		     gboolean v_boolean)
52209f8e937f21552d441a5a2b06767a67459195653Tim Janik{
52309f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_if_fail (G_IS_VALUE_BOOLEAN (value));
52409f8e937f21552d441a5a2b06767a67459195653Tim Janik
52509f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_int = v_boolean;
52609f8e937f21552d441a5a2b06767a67459195653Tim Janik}
52709f8e937f21552d441a5a2b06767a67459195653Tim Janik
52809f8e937f21552d441a5a2b06767a67459195653Tim Janikgboolean
529ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikg_value_get_boolean (const GValue *value)
53009f8e937f21552d441a5a2b06767a67459195653Tim Janik{
53109f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_val_if_fail (G_IS_VALUE_BOOLEAN (value), 0);
53209f8e937f21552d441a5a2b06767a67459195653Tim Janik
53309f8e937f21552d441a5a2b06767a67459195653Tim Janik  return value->data[0].v_int;
53409f8e937f21552d441a5a2b06767a67459195653Tim Janik}
53509f8e937f21552d441a5a2b06767a67459195653Tim Janik
53609f8e937f21552d441a5a2b06767a67459195653Tim Janikvoid
53709f8e937f21552d441a5a2b06767a67459195653Tim Janikg_value_set_int (GValue *value,
53809f8e937f21552d441a5a2b06767a67459195653Tim Janik		 gint	 v_int)
53909f8e937f21552d441a5a2b06767a67459195653Tim Janik{
54009f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_if_fail (G_IS_VALUE_INT (value));
54109f8e937f21552d441a5a2b06767a67459195653Tim Janik
54209f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_int = v_int;
54309f8e937f21552d441a5a2b06767a67459195653Tim Janik}
54409f8e937f21552d441a5a2b06767a67459195653Tim Janik
54509f8e937f21552d441a5a2b06767a67459195653Tim Janikgint
546ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikg_value_get_int (const GValue *value)
54709f8e937f21552d441a5a2b06767a67459195653Tim Janik{
54809f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_val_if_fail (G_IS_VALUE_INT (value), 0);
54909f8e937f21552d441a5a2b06767a67459195653Tim Janik
55009f8e937f21552d441a5a2b06767a67459195653Tim Janik  return value->data[0].v_int;
55109f8e937f21552d441a5a2b06767a67459195653Tim Janik}
55209f8e937f21552d441a5a2b06767a67459195653Tim Janik
55309f8e937f21552d441a5a2b06767a67459195653Tim Janikvoid
55409f8e937f21552d441a5a2b06767a67459195653Tim Janikg_value_set_uint (GValue *value,
55509f8e937f21552d441a5a2b06767a67459195653Tim Janik		  guint	  v_uint)
55609f8e937f21552d441a5a2b06767a67459195653Tim Janik{
55709f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_if_fail (G_IS_VALUE_UINT (value));
55809f8e937f21552d441a5a2b06767a67459195653Tim Janik
55909f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_uint = v_uint;
56009f8e937f21552d441a5a2b06767a67459195653Tim Janik}
56109f8e937f21552d441a5a2b06767a67459195653Tim Janik
56209f8e937f21552d441a5a2b06767a67459195653Tim Janikguint
563ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikg_value_get_uint (const GValue *value)
56409f8e937f21552d441a5a2b06767a67459195653Tim Janik{
56509f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_val_if_fail (G_IS_VALUE_UINT (value), 0);
56609f8e937f21552d441a5a2b06767a67459195653Tim Janik
56709f8e937f21552d441a5a2b06767a67459195653Tim Janik  return value->data[0].v_uint;
56809f8e937f21552d441a5a2b06767a67459195653Tim Janik}
56909f8e937f21552d441a5a2b06767a67459195653Tim Janik
57009f8e937f21552d441a5a2b06767a67459195653Tim Janikvoid
57109f8e937f21552d441a5a2b06767a67459195653Tim Janikg_value_set_long (GValue *value,
57209f8e937f21552d441a5a2b06767a67459195653Tim Janik		  glong	  v_long)
57309f8e937f21552d441a5a2b06767a67459195653Tim Janik{
57409f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_if_fail (G_IS_VALUE_LONG (value));
57509f8e937f21552d441a5a2b06767a67459195653Tim Janik
57609f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_long = v_long;
57709f8e937f21552d441a5a2b06767a67459195653Tim Janik}
57809f8e937f21552d441a5a2b06767a67459195653Tim Janik
57909f8e937f21552d441a5a2b06767a67459195653Tim Janikglong
580ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikg_value_get_long (const GValue *value)
58109f8e937f21552d441a5a2b06767a67459195653Tim Janik{
58209f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_val_if_fail (G_IS_VALUE_LONG (value), 0);
58309f8e937f21552d441a5a2b06767a67459195653Tim Janik
58409f8e937f21552d441a5a2b06767a67459195653Tim Janik  return value->data[0].v_long;
58509f8e937f21552d441a5a2b06767a67459195653Tim Janik}
58609f8e937f21552d441a5a2b06767a67459195653Tim Janik
58709f8e937f21552d441a5a2b06767a67459195653Tim Janikvoid
58809f8e937f21552d441a5a2b06767a67459195653Tim Janikg_value_set_ulong (GValue *value,
58909f8e937f21552d441a5a2b06767a67459195653Tim Janik		   gulong  v_ulong)
59009f8e937f21552d441a5a2b06767a67459195653Tim Janik{
59109f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_if_fail (G_IS_VALUE_ULONG (value));
59209f8e937f21552d441a5a2b06767a67459195653Tim Janik
59309f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_ulong = v_ulong;
59409f8e937f21552d441a5a2b06767a67459195653Tim Janik}
59509f8e937f21552d441a5a2b06767a67459195653Tim Janik
59609f8e937f21552d441a5a2b06767a67459195653Tim Janikgulong
597ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikg_value_get_ulong (const GValue *value)
59809f8e937f21552d441a5a2b06767a67459195653Tim Janik{
59909f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_val_if_fail (G_IS_VALUE_ULONG (value), 0);
60009f8e937f21552d441a5a2b06767a67459195653Tim Janik
60109f8e937f21552d441a5a2b06767a67459195653Tim Janik  return value->data[0].v_ulong;
60209f8e937f21552d441a5a2b06767a67459195653Tim Janik}
60309f8e937f21552d441a5a2b06767a67459195653Tim Janik
60409f8e937f21552d441a5a2b06767a67459195653Tim Janikvoid
60509f8e937f21552d441a5a2b06767a67459195653Tim Janikg_value_set_float (GValue *value,
60609f8e937f21552d441a5a2b06767a67459195653Tim Janik		   gfloat  v_float)
60709f8e937f21552d441a5a2b06767a67459195653Tim Janik{
60809f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_if_fail (G_IS_VALUE_FLOAT (value));
60909f8e937f21552d441a5a2b06767a67459195653Tim Janik
61009f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_float = v_float;
61109f8e937f21552d441a5a2b06767a67459195653Tim Janik}
61209f8e937f21552d441a5a2b06767a67459195653Tim Janik
61309f8e937f21552d441a5a2b06767a67459195653Tim Janikgfloat
614ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikg_value_get_float (const GValue *value)
61509f8e937f21552d441a5a2b06767a67459195653Tim Janik{
61609f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_val_if_fail (G_IS_VALUE_FLOAT (value), 0);
61709f8e937f21552d441a5a2b06767a67459195653Tim Janik
61809f8e937f21552d441a5a2b06767a67459195653Tim Janik  return value->data[0].v_float;
61909f8e937f21552d441a5a2b06767a67459195653Tim Janik}
62009f8e937f21552d441a5a2b06767a67459195653Tim Janik
62109f8e937f21552d441a5a2b06767a67459195653Tim Janikvoid
62209f8e937f21552d441a5a2b06767a67459195653Tim Janikg_value_set_double (GValue *value,
62309f8e937f21552d441a5a2b06767a67459195653Tim Janik		    gdouble v_double)
62409f8e937f21552d441a5a2b06767a67459195653Tim Janik{
62509f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_if_fail (G_IS_VALUE_DOUBLE (value));
62609f8e937f21552d441a5a2b06767a67459195653Tim Janik
62709f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_double = v_double;
62809f8e937f21552d441a5a2b06767a67459195653Tim Janik}
62909f8e937f21552d441a5a2b06767a67459195653Tim Janik
63009f8e937f21552d441a5a2b06767a67459195653Tim Janikgdouble
631ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikg_value_get_double (const GValue *value)
63209f8e937f21552d441a5a2b06767a67459195653Tim Janik{
63309f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_val_if_fail (G_IS_VALUE_DOUBLE (value), 0);
63409f8e937f21552d441a5a2b06767a67459195653Tim Janik
63509f8e937f21552d441a5a2b06767a67459195653Tim Janik  return value->data[0].v_double;
63609f8e937f21552d441a5a2b06767a67459195653Tim Janik}
63709f8e937f21552d441a5a2b06767a67459195653Tim Janik
63809f8e937f21552d441a5a2b06767a67459195653Tim Janikvoid
63909f8e937f21552d441a5a2b06767a67459195653Tim Janikg_value_set_string (GValue	*value,
64009f8e937f21552d441a5a2b06767a67459195653Tim Janik		    const gchar *v_string)
64109f8e937f21552d441a5a2b06767a67459195653Tim Janik{
64209f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_if_fail (G_IS_VALUE_STRING (value));
64309f8e937f21552d441a5a2b06767a67459195653Tim Janik
644900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik  if (value->data[1].v_uint & G_VALUE_STATIC_TAG)
645900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik    value->data[1].v_uint = 0;
646900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik  else
647900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik    g_free (value->data[0].v_pointer);
64809f8e937f21552d441a5a2b06767a67459195653Tim Janik  value->data[0].v_pointer = g_strdup (v_string);
64909f8e937f21552d441a5a2b06767a67459195653Tim Janik}
65009f8e937f21552d441a5a2b06767a67459195653Tim Janik
651900d0ed069fe09201d0c58813d1560b6845cef1dTim Janikvoid
652900d0ed069fe09201d0c58813d1560b6845cef1dTim Janikg_value_set_static_string (GValue      *value,
653900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik			   const gchar *v_string)
654900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik{
655900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik  g_return_if_fail (G_IS_VALUE_STRING (value));
656900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik
657900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik  if (!(value->data[1].v_uint & G_VALUE_STATIC_TAG))
658900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik    g_free (value->data[0].v_pointer);
659900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik  value->data[1].v_uint = G_VALUE_STATIC_TAG;
660900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik  value->data[0].v_pointer = (gchar*) v_string;
661900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik}
662900d0ed069fe09201d0c58813d1560b6845cef1dTim Janik
66309f8e937f21552d441a5a2b06767a67459195653Tim Janikgchar*
664ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikg_value_get_string (const GValue *value)
66509f8e937f21552d441a5a2b06767a67459195653Tim Janik{
66609f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_val_if_fail (G_IS_VALUE_STRING (value), NULL);
66709f8e937f21552d441a5a2b06767a67459195653Tim Janik
66809f8e937f21552d441a5a2b06767a67459195653Tim Janik  return value->data[0].v_pointer;
66909f8e937f21552d441a5a2b06767a67459195653Tim Janik}
67009f8e937f21552d441a5a2b06767a67459195653Tim Janik
67109f8e937f21552d441a5a2b06767a67459195653Tim Janikgchar*
672ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikg_value_dup_string (const GValue *value)
67309f8e937f21552d441a5a2b06767a67459195653Tim Janik{
67409f8e937f21552d441a5a2b06767a67459195653Tim Janik  g_return_val_if_fail (G_IS_VALUE_STRING (value), NULL);
67509f8e937f21552d441a5a2b06767a67459195653Tim Janik
67609f8e937f21552d441a5a2b06767a67459195653Tim Janik  return g_strdup (value->data[0].v_pointer);
67709f8e937f21552d441a5a2b06767a67459195653Tim Janik}
678ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
679ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikvoid
680ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikg_value_set_pointer (GValue  *value,
681ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik		     gpointer v_pointer)
682ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik{
683ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  g_return_if_fail (G_IS_VALUE_POINTER (value));
684ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
685ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  value->data[0].v_pointer = v_pointer;
686ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik}
687ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
688ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janikgpointer
6891e46cf8099b2d4575286d5a9272aa8f4be056a57Tim Janikg_value_get_pointer (const GValue *value)
690ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik{
691ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  g_return_val_if_fail (G_IS_VALUE_POINTER (value), NULL);
692ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik
693ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik  return value->data[0].v_pointer;
694ee23c09e83d06a0d131ebd234c132f1c3602c019Tim Janik}
695