gvalue.h revision 5852eace661bf5411e091a792d47e67fb7fd352e
1/* GObject - GLib Type, Object, Parameter and Signal Library
2 * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General
15 * Public License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
17 * Boston, MA 02111-1307, USA.
18 *
19 * gvalue.h: generic GValue functions
20 */
21#ifndef __G_VALUE_H__
22#define __G_VALUE_H__
23
24#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
25#error "Only <glib-object.h> can be included directly."
26#endif
27
28#include	<gobject/gtype.h>
29
30G_BEGIN_DECLS
31
32/* --- type macros --- */
33#define	G_TYPE_IS_VALUE(type)		(g_type_value_table_peek (type) != NULL)
34#define	G_IS_VALUE(value)		(G_TYPE_CHECK_VALUE (value))
35#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
36#define	G_VALUE_TYPE_NAME(value)	(g_type_name (G_VALUE_TYPE (value)))
37#define G_VALUE_HOLDS(value,type)	(G_TYPE_CHECK_VALUE_TYPE ((value), (type)))
38
39
40/* --- typedefs & structures --- */
41typedef void (*GValueExchange)  (GValue	      *value1,
42				 GValue	      *value2);
43typedef void (*GValueTransform) (const GValue *src_value,
44				 GValue       *dest_value);
45struct _GValue
46{
47  /*< private >*/
48  GType		g_type;
49
50  /* public for GTypeValueTable methods */
51  union {
52    gint	v_int;
53    guint	v_uint;
54    glong	v_long;
55    gulong	v_ulong;
56    gint64      v_int64;
57    guint64     v_uint64;
58    gfloat	v_float;
59    gdouble	v_double;
60    gpointer	v_pointer;
61  } data[4];
62};
63
64
65/* --- prototypes --- */
66GValue*         g_value_init	   	(GValue       *value,
67					 GType         g_type);
68void            g_value_copy    	(const GValue *src_value,
69					 GValue       *dest_value);
70GValue*         g_value_reset   	(GValue       *value);
71void            g_value_unset   	(GValue       *value);
72void		g_value_set_instance	(GValue	      *value,
73					 gpointer      instance);
74
75
76/* --- private --- */
77gboolean	g_value_fits_pointer	(const GValue *value);
78gpointer	g_value_peek_pointer	(const GValue *value);
79
80
81/* --- implementation details --- */
82gboolean g_value_type_compatible	(GType		 src_type,
83					 GType		 dest_type);
84gboolean g_value_type_transformable	(GType           src_type,
85					 GType           dest_type);
86gboolean g_value_transform		(const GValue   *src_value,
87					 GValue         *dest_value);
88void	g_value_register_transform_func	(GType		 src_type,
89					 GType		 dest_type,
90					 GValueTransform transform_func);
91#define G_VALUE_NOCOPY_CONTENTS		(1 << 27)
92
93
94G_END_DECLS
95
96#endif /* __G_VALUE_H__ */
97