Zrythm
v2.0.0-DEV
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 <cstddef>
8
#include <cstring>
9
15
16
[[gnu::nonnull]]
static
inline
void
17
_object_zero_and_free (
void
** ptr,
size_t
sz)
18
{
19
if
(!*ptr)
20
return
;
21
22
memset (*ptr, 0, sz);
23
free (*ptr);
24
*ptr = NULL;
25
}
26
31
[[gnu::nonnull]]
static
inline
void
32
_object_zero_and_free_unresizable (
void
** ptr,
size_t
sz)
33
{
34
if
(!*ptr)
35
return
;
36
37
memset (*ptr, 0, sz);
38
free (*ptr);
39
*ptr = NULL;
40
}
41
45
#define object_new(type) (type *) calloc (1, sizeof (type))
46
58
#define object_new_unresizable(type) object_new (type)
59
63
#define object_new_n_sizeof(n, sz) calloc (n, sz)
64
68
#define object_new_n(n, type) \
69
(static_cast<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
static_cast<type *> ( \
82
object_realloc_n_sizeof (obj, prev_n * sizeof (type), n * sizeof (type)))
83
89
#define object_set_to_zero(ptr) memset (ptr, 0, sizeof (*(ptr)))
90
96
#define object_free_unresizable(type, obj) free (obj)
97
102
#define object_zero_and_free(ptr) \
103
_object_zero_and_free ((void **) &(ptr), sizeof (*(ptr)))
104
105
#define object_zero_and_free_unresizable(type, ptr) \
106
_object_zero_and_free_unresizable ((void **) &(ptr), sizeof (type))
107
112
#define object_free_w_func_and_null(_func, _obj) \
113
if (_obj) \
114
{ \
115
_func (_obj); \
116
_obj = NULL; \
117
}
118
119
#define object_delete_and_null(_obj) \
120
if (_obj) \
121
{ \
122
delete _obj; \
123
_obj = nullptr; \
124
}
125
126
#define object_zero_and_free_if_nonnull(ptr) \
127
object_free_w_func_and_null (object_zero_and_free, ptr)
128
130
#define g_object_unref_and_null(ptr) \
131
object_free_w_func_and_null (g_object_unref, ptr)
132
134
#define g_free_and_null(ptr) object_free_w_func_and_null (free, ptr)
135
137
#define g_error_free_and_null(ptr) \
138
object_free_w_func_and_null (g_error_free, ptr)
139
143
144
#endif
src
utils
objects.h
Generated by
1.14.0