30#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
31#error "Only <glib.h> can be included directly."
57#if GLIB_SIZEOF_VOID_P > GLIB_SIZEOF_LONG
64# define G_MEM_ALIGN GLIB_SIZEOF_VOID_P
66# define G_MEM_ALIGN GLIB_SIZEOF_LONG
134#if defined(glib_typeof) && GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_58
135#define g_clear_pointer(pp, destroy) \
138 G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer)); \
139 glib_typeof ((pp)) _pp = (pp); \
140 glib_typeof (*(pp)) _ptr = *_pp; \
146 GLIB_AVAILABLE_MACRO_IN_2_34
148#define g_clear_pointer(pp, destroy) \
150 G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer)); \
152 union { char *in; gpointer *out; } _pp; \
155 GDestroyNotify _destroy = (GDestroyNotify) (destroy); \
157 _pp.in = (char *) (pp); \
165 GLIB_AVAILABLE_MACRO_IN_2_34
169#if G_GNUC_CHECK_VERSION (4, 1) && GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_78 && defined(G_HAVE_FREE_SIZED)
172 (__builtin_object_size ((mem), 0) != ((size_t) - 1)) ? \
173 g_free_sized (mem, __builtin_object_size ((mem), 0)) : (g_free) (mem)
246#if defined(glib_typeof) && GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_58
247#define g_steal_pointer(pp) ((glib_typeof (*pp)) (g_steal_pointer) (pp))
251#define g_steal_pointer(pp) \
252 (0 ? (*(pp)) : (g_steal_pointer) (pp))
258#if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__)
259# define _G_NEW(struct_type, n_structs, func) \
260 (struct_type *) (G_GNUC_EXTENSION ({ \
261 gsize __n = (gsize) (n_structs); \
262 gsize __s = sizeof (struct_type); \
265 __p = g_##func (__n); \
266 else if (__builtin_constant_p (__n) && \
267 (__s == 0 || __n <= G_MAXSIZE / __s)) \
268 __p = g_##func (__n * __s); \
270 __p = g_##func##_n (__n, __s); \
273# define _G_RENEW(struct_type, mem, n_structs, func) \
274 (struct_type *) (G_GNUC_EXTENSION ({ \
275 gsize __n = (gsize) (n_structs); \
276 gsize __s = sizeof (struct_type); \
277 gpointer __p = (gpointer) (mem); \
279 __p = g_##func (__p, __n); \
280 else if (__builtin_constant_p (__n) && \
281 (__s == 0 || __n <= G_MAXSIZE / __s)) \
282 __p = g_##func (__p, __n * __s); \
284 __p = g_##func##_n (__p, __n, __s); \
292#define _G_NEW(struct_type, n_structs, func) \
293 ((struct_type *) g_##func##_n ((n_structs), sizeof (struct_type)))
294#define _G_RENEW(struct_type, mem, n_structs, func) \
295 ((struct_type *) g_##func##_n (mem, (n_structs), sizeof (struct_type)))
315#define g_new(struct_type, n_structs) _G_NEW (struct_type, n_structs, malloc)
332#define g_new0(struct_type, n_structs) _G_NEW (struct_type, n_structs, malloc0)
346#define g_renew(struct_type, mem, n_structs) _G_RENEW (struct_type, mem, n_structs, realloc)
360#define g_try_new(struct_type, n_structs) _G_NEW (struct_type, n_structs, try_malloc)
375#define g_try_new0(struct_type, n_structs) _G_NEW (struct_type, n_structs, try_malloc0)
391#define g_try_renew(struct_type, mem, n_structs) _G_RENEW (struct_type, mem, n_structs, try_realloc)
405 gsize n_block_bytes);
#define GLIB_AVAILABLE_IN_2_76
#define GLIB_DEPRECATED_IN_2_46
#define GLIB_AVAILABLE_IN_2_34
#define GLIB_AVAILABLE_IN_2_72
#define GLIB_AVAILABLE_IN_ALL
#define GLIB_AVAILABLE_STATIC_INLINE_IN_2_44
#define G_GNUC_WARN_UNUSED_RESULT
#define G_GNUC_ALLOC_SIZE2(x, y)
#define G_GNUC_ALLOC_SIZE(x)
#define g_clear_pointer(pp, destroy)
GLIB_AVAILABLE_IN_ALL gpointer GLIB_AVAILABLE_IN_ALL gpointer g_try_malloc0_n(gsize n_blocks, gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1
GLIB_AVAILABLE_IN_2_72 gpointer GLIB_AVAILABLE_IN_2_72 gpointer GLIB_AVAILABLE_IN_2_72 void g_aligned_free(gpointer mem)
GLIB_AVAILABLE_IN_ALL gpointer GLIB_AVAILABLE_IN_ALL gpointer g_malloc0_n(gsize n_blocks, gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1
GLIB_AVAILABLE_IN_ALL gpointer g_malloc_n(gsize n_blocks, gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1
GLIB_DEPRECATED_IN_2_46 void g_mem_set_vtable(GMemVTable *vtable)
GLIB_VAR GMemVTable * glib_mem_profiler_table
GLIB_AVAILABLE_IN_2_76 void g_free_sized(gpointer mem, size_t size)
GLIB_AVAILABLE_IN_ALL gpointer g_try_realloc(gpointer mem, gsize n_bytes) G_GNUC_WARN_UNUSED_RESULT
GLIB_AVAILABLE_IN_2_72 gpointer g_aligned_alloc(gsize n_blocks, gsize n_block_bytes, gsize alignment) G_GNUC_WARN_UNUSED_RESULT G_GNUC_ALLOC_SIZE2(1
GLIB_DEPRECATED_IN_2_46 void g_mem_profile(void)
GLIB_AVAILABLE_IN_ALL void g_free(gpointer mem)
GLIB_AVAILABLE_IN_ALL gpointer GLIB_AVAILABLE_IN_ALL gpointer GLIB_AVAILABLE_IN_ALL gpointer g_realloc_n(gpointer mem, gsize n_blocks, gsize n_block_bytes) G_GNUC_WARN_UNUSED_RESULT
GLIB_AVAILABLE_IN_ALL gpointer g_malloc(gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1)
GLIB_AVAILABLE_IN_ALL gpointer g_try_malloc0(gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1)
GLIB_AVAILABLE_IN_ALL gpointer g_try_malloc(gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1)
GLIB_VAR gboolean g_mem_gc_friendly
GLIB_AVAILABLE_IN_ALL gpointer g_malloc0(gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1)
#define g_steal_pointer(pp)
GLIB_AVAILABLE_IN_2_76 void g_aligned_free_sized(gpointer mem, size_t alignment, size_t size)
GLIB_AVAILABLE_IN_ALL gpointer g_realloc(gpointer mem, gsize n_bytes) G_GNUC_WARN_UNUSED_RESULT
GLIB_AVAILABLE_IN_2_72 gpointer GLIB_AVAILABLE_IN_2_72 gpointer g_aligned_alloc0(gsize n_blocks, gsize n_block_bytes, gsize alignment) G_GNUC_WARN_UNUSED_RESULT G_GNUC_ALLOC_SIZE2(1
GLIB_AVAILABLE_IN_ALL gpointer GLIB_AVAILABLE_IN_ALL gpointer GLIB_AVAILABLE_IN_ALL gpointer g_try_realloc_n(gpointer mem, gsize n_blocks, gsize n_block_bytes) G_GNUC_WARN_UNUSED_RESULT
typedefG_BEGIN_DECLS struct _GMemVTable GMemVTable
GLIB_AVAILABLE_IN_ALL gpointer g_try_malloc_n(gsize n_blocks, gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1
GLIB_DEPRECATED_IN_2_46 gboolean g_mem_is_system_malloc(void)
void(* GDestroyNotify)(gpointer data)
gpointer(* calloc)(gsize n_blocks, gsize n_block_bytes)
gpointer(* realloc)(gpointer mem, gsize n_bytes)
gpointer(* malloc)(gsize n_bytes)
gpointer(* try_realloc)(gpointer mem, gsize n_bytes)
gpointer(* try_malloc)(gsize n_bytes)
void(* free)(gpointer mem)