• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* GObject - GLib Type, Object, Parameter and Signal Library
2  * Copyright (C) 2000-2001 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 #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
20 #error "Only <glib-object.h> can be included directly."
21 #endif
22 
23 #ifndef __G_BOXED_H__
24 #define __G_BOXED_H__
25 
26 #include        <gobject/gtype.h>
27 
28 G_BEGIN_DECLS
29 
30 /* --- type macros --- */
31 #define G_TYPE_IS_BOXED(type)	   (G_TYPE_FUNDAMENTAL (type) == G_TYPE_BOXED)
32 /**
33  * G_VALUE_HOLDS_BOXED:
34  * @value: a valid #GValue structure
35  *
36  * Checks whether the given #GValue can hold values derived from type %G_TYPE_BOXED.
37  *
38  * Returns: %TRUE on success.
39  */
40 #define G_VALUE_HOLDS_BOXED(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_BOXED))
41 
42 
43 /* --- typedefs --- */
44 /**
45  * GBoxedCopyFunc:
46  * @boxed: The boxed structure to be copied.
47  *
48  * This function is provided by the user and should produce a copy of the passed
49  * in boxed structure.
50  *
51  * Returns: The newly created copy of the boxed structure.
52  */
53 typedef gpointer (*GBoxedCopyFunc) (gpointer boxed);
54 
55 /**
56  * GBoxedFreeFunc:
57  * @boxed: The boxed structure to be freed.
58  *
59  * This function is provided by the user and should free the boxed
60  * structure passed.
61  */
62 typedef void (*GBoxedFreeFunc) (gpointer boxed);
63 
64 
65 /* --- prototypes --- */
66 gpointer	g_boxed_copy			(GType		 boxed_type,
67 						 gconstpointer	 src_boxed);
68 void		g_boxed_free			(GType		 boxed_type,
69 						 gpointer	 boxed);
70 void		g_value_set_boxed		(GValue		*value,
71 						 gconstpointer	 v_boxed);
72 void		g_value_set_static_boxed	(GValue		*value,
73 						 gconstpointer	 v_boxed);
74 gpointer	g_value_get_boxed		(const GValue	*value);
75 gpointer	g_value_dup_boxed		(const GValue	*value);
76 
77 
78 /* --- convenience --- */
79 GType	g_boxed_type_register_static		(const gchar	*name,
80 						 GBoxedCopyFunc	 boxed_copy,
81 						 GBoxedFreeFunc	 boxed_free);
82 
83 
84 /* --- GLib boxed types --- */
85 /**
86  * G_TYPE_CLOSURE:
87  *
88  * The #GType for #GClosure.
89  */
90 #define	G_TYPE_CLOSURE		(g_closure_get_type ())
91 /**
92  * G_TYPE_VALUE:
93  *
94  * The type ID of the "GValue" type which is a boxed type,
95  * used to pass around pointers to GValues.
96  */
97 #define	G_TYPE_VALUE		(g_value_get_type ())
98 /**
99  * G_TYPE_VALUE_ARRAY:
100  *
101  * The type ID of the "GValueArray" type which is a boxed type,
102  * used to pass around pointers to GValueArrays.
103  */
104 #define	G_TYPE_VALUE_ARRAY	(g_value_array_get_type ())
105 /**
106  * G_TYPE_DATE:
107  *
108  * The #GType for #GDate.
109  */
110 #define	G_TYPE_DATE	        (g_date_get_type ())
111 /**
112  * G_TYPE_STRV:
113  *
114  * The #GType for a boxed type holding a %NULL-terminated array of strings.
115  *
116  * The code fragments in the following example show the use of a property of
117  * type #G_TYPE_STRV with g_object_class_install_property(), g_object_set()
118  * and g_object_get().
119  *
120  * |[
121  * g_object_class_install_property (object_class,
122  *                                  PROP_AUTHORS,
123  *                                  g_param_spec_boxed ("authors",
124  *                                                      _("Authors"),
125  *                                                      _("List of authors"),
126  *                                                      G_TYPE_STRV,
127  *                                                      G_PARAM_READWRITE));
128  *
129  *
130  * gchar *authors[] = { "Owen", "Tim", NULL };
131  * g_object_set (obj, "authors", authors, NULL);
132  *
133  *
134  * gchar *writers[];
135  * g_object_get (obj, "authors", &writers, NULL);
136  * // do something with writers
137  * g_strfreev (writers);
138  * ]|
139  *
140  * Since: 2.4
141  */
142 #define	G_TYPE_STRV	        (g_strv_get_type ())
143 /**
144  * G_TYPE_GSTRING:
145  *
146  * The #GType for #GString.
147  */
148 #define	G_TYPE_GSTRING		(g_gstring_get_type ())
149 /**
150  * G_TYPE_HASH_TABLE:
151  *
152  * The #GType for a boxed type holding a #GHashTable reference.
153  *
154  * Since: 2.10
155  */
156 #define	G_TYPE_HASH_TABLE (g_hash_table_get_type ())
157 /**
158  * G_TYPE_REGEX:
159  *
160  * The #GType for a boxed type holding a #GRegex reference.
161  *
162  * Since: 2.14
163  */
164 #define	G_TYPE_REGEX (g_regex_get_type ())
165 
166 
167 void    g_value_take_boxed      (GValue		*value,
168 				 gconstpointer	 v_boxed);
169 #ifndef G_DISABLE_DEPRECATED
170 void	g_value_set_boxed_take_ownership	(GValue		*value,
171 						 gconstpointer	 v_boxed);
172 #endif
173 GType	g_closure_get_type	(void)	G_GNUC_CONST;
174 GType	g_value_get_type	(void)	G_GNUC_CONST;
175 GType	g_value_array_get_type	(void)	G_GNUC_CONST;
176 GType	g_date_get_type	        (void)	G_GNUC_CONST;
177 GType	g_strv_get_type	        (void)	G_GNUC_CONST;
178 GType	g_gstring_get_type      (void)	G_GNUC_CONST;
179 GType   g_hash_table_get_type   (void)  G_GNUC_CONST;
180 GType   g_regex_get_type        (void)  G_GNUC_CONST;
181 
182 /**
183  * GStrv:
184  *
185  * A C representable type name for #G_TYPE_STRV.
186  */
187 typedef gchar** GStrv;
188 
189 G_END_DECLS
190 
191 #endif	/* __G_BOXED_H__ */
192