1/* GObject - GLib Type, Object, Parameter and Signal Library
2 * Copyright (C) 2000-2001 Red Hat, Inc.
3 *
4 * SPDX-License-Identifier: LGPL-2.1-or-later
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General
17 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
18 */
19#ifndef __G_BOXED_H__
20#define __G_BOXED_H__
21
22#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
23#error "Only <glib-object.h> can be included directly."
24#endif
25
26#include <gobject/gtype.h>
27
28#ifndef __GI_SCANNER__
29#include <gobject/glib-types.h>
30#endif
31
32G_BEGIN_DECLS
33
34/* --- type macros --- */
35#define G_TYPE_IS_BOXED(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_BOXED)
36/**
37 * G_VALUE_HOLDS_BOXED:
38 * @value: a valid #GValue structure
39 *
40 * Checks whether the given #GValue can hold values derived
41 * from type %G_TYPE_BOXED.
42 *
43 * Returns: %TRUE on success.
44 */
45#define G_VALUE_HOLDS_BOXED(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_BOXED))
46
47
48/* --- typedefs --- */
49/**
50 * GBoxedCopyFunc:
51 * @boxed: (not nullable): The boxed structure to be copied.
52 *
53 * This function is provided by the user and should produce a copy
54 * of the passed in boxed structure.
55 *
56 * Returns: (not nullable): The newly created copy of the boxed structure.
57 */
58typedef gpointer (*GBoxedCopyFunc) (gpointer boxed);
59
60/**
61 * GBoxedFreeFunc:
62 * @boxed: (not nullable): The boxed structure to be freed.
63 *
64 * This function is provided by the user and should free the boxed
65 * structure passed.
66 */
67typedef void (*GBoxedFreeFunc) (gpointer boxed);
68
69
70/* --- prototypes --- */
71GOBJECT_AVAILABLE_IN_ALL
72gpointer g_boxed_copy (GType boxed_type,
73 gconstpointer src_boxed);
74GOBJECT_AVAILABLE_IN_ALL
75void g_boxed_free (GType boxed_type,
76 gpointer boxed);
77GOBJECT_AVAILABLE_IN_ALL
78void g_value_set_boxed (GValue *value,
79 gconstpointer v_boxed);
80GOBJECT_AVAILABLE_IN_ALL
81void g_value_set_static_boxed (GValue *value,
82 gconstpointer v_boxed);
83GOBJECT_AVAILABLE_IN_ALL
84void g_value_take_boxed (GValue *value,
85 gconstpointer v_boxed);
86GOBJECT_DEPRECATED_FOR(g_value_take_boxed)
87void g_value_set_boxed_take_ownership (GValue *value,
88 gconstpointer v_boxed);
89GOBJECT_AVAILABLE_IN_ALL
90gpointer g_value_get_boxed (const GValue *value);
91GOBJECT_AVAILABLE_IN_ALL
92gpointer g_value_dup_boxed (const GValue *value);
93
94
95/* --- convenience --- */
96GOBJECT_AVAILABLE_IN_ALL
97GType g_boxed_type_register_static (const gchar *name,
98 GBoxedCopyFunc boxed_copy,
99 GBoxedFreeFunc boxed_free);
100
101/* --- GObject boxed types --- */
102/**
103 * G_TYPE_CLOSURE:
104 *
105 * The #GType for #GClosure.
106 */
107#define G_TYPE_CLOSURE (g_closure_get_type ())
108
109/**
110 * G_TYPE_VALUE:
111 *
112 * The type ID of the "GValue" type which is a boxed type,
113 * used to pass around pointers to GValues.
114 */
115#define G_TYPE_VALUE (g_value_get_type ())
116
117GOBJECT_AVAILABLE_IN_ALL
118GType g_closure_get_type (void) G_GNUC_CONST;
119GOBJECT_AVAILABLE_IN_ALL
120GType g_value_get_type (void) G_GNUC_CONST;
121
122G_END_DECLS
123
124#endif /* __G_BOXED_H__ */
125