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