Zrythm
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
objects.h
1
// SPDX-FileCopyrightText: © 2019-2023 Alexandros Theodotou <alex@zrythm.org>
2
// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4
#ifndef __UTILS_OBJECTS_H__
5
#define __UTILS_OBJECTS_H__
6
7
#include <stddef.h>
8
9
#include <gmodule.h>
10
17
NONNULL
static
inline
void
18
_object_zero_and_free (
void
** ptr,
size_t
sz)
19
{
20
if
(!*ptr)
21
return
;
22
23
memset (*ptr, 0, sz);
24
free (*ptr);
25
*ptr = NULL;
26
}
27
32
NONNULL
static
inline
void
33
_object_zero_and_free_unresizable (
void
** ptr,
size_t
sz)
34
{
35
if
(!*ptr)
36
return
;
37
38
memset (*ptr, 0, sz);
39
free (*ptr);
40
*ptr = NULL;
41
}
42
46
#define object_new(type) g_malloc0 (sizeof (type))
47
59
#define object_new_unresizable(type) object_new (type)
60
64
#define object_new_n_sizeof(n, sz) g_malloc0_n (n, sz)
65
69
#define object_new_n(n, type) object_new_n_sizeof (n, sizeof (type))
70
71
#define object_realloc_n_sizeof(obj, prev_sz, sz) \
72
realloc_zero (obj, prev_sz, sz)
73
80
#define object_realloc_n(obj, prev_n, n, type) \
81
object_realloc_n_sizeof (obj, prev_n * sizeof (type), n * sizeof (type))
82
88
#define object_set_to_zero(ptr) memset (ptr, 0, sizeof (*(ptr)))
89
95
#define object_free_unresizable(type, obj) free (obj)
96
101
#define object_zero_and_free(ptr) \
102
_object_zero_and_free ((void **) &(ptr), sizeof (*(ptr)))
103
104
#define object_zero_and_free_unresizable(type, ptr) \
105
_object_zero_and_free_unresizable ((void **) &(ptr), sizeof (type))
106
111
#define object_free_w_func_and_null(_func, _obj) \
112
if (_obj) \
113
{ \
114
_func (_obj); \
115
_obj = NULL; \
116
}
117
118
#define object_zero_and_free_if_nonnull(ptr) \
119
object_free_w_func_and_null (object_zero_and_free, ptr)
120
122
#define g_object_unref_and_null(ptr) \
123
object_free_w_func_and_null (g_object_unref, ptr)
124
126
#define g_free_and_null(ptr) object_free_w_func_and_null (g_free, ptr)
127
129
#define g_error_free_and_null(ptr) \
130
object_free_w_func_and_null (g_error_free, ptr)
131
133
#define object_free_w_func_and_null_cast(_func, _cast, _obj) \
134
if (_obj) \
135
{ \
136
_func ((_cast) _obj); \
137
_obj = NULL; \
138
}
139
140
#define g_source_remove_and_zero(src_id) \
141
{ \
142
g_source_remove (src_id); \
143
src_id = 0; \
144
}
145
150
#endif
utils
objects.h
Generated by
1.10.0