81 #define csnip_mem_Alloc(nMember, ptr, err) \
83 if ((nMember) < 0 || \
84 SIZE_MAX / sizeof(*(ptr)) < (nMember)) \
87 csnip_err_Raise(csnip_err_RANGE, err); \
90 if (((ptr) = malloc(sizeof(*(ptr)) * (nMember))) == NULL) \
91 csnip_err_Raise(csnip_err_NOMEM, err); \
99 #define csnip_mem_Alloc0(nMember, ptr, err) \
101 if ((nMember) < 0) { \
103 csnip_err_Raise(csnip_err_RANGE, err); \
106 if (((ptr) = calloc((nMember), sizeof(*(ptr)))) == NULL) \
107 csnip_err_Raise(csnip_err_NOMEM, err); \
119 #define csnip_mem_AlignedAlloc(nMember, nAlign, ptr, err) \
120 csnip_mem__AlignedAlloc((nMember), (nAlign), (ptr), (err))
123 #define csnip_mem__AlignedAlloc(nMember, nAlign, ptr, err) \
125 if (nAlign < 0 || nAlign > SIZE_MAX ||nMember < 0 || \
126 SIZE_MAX / sizeof(*ptr) < nMember) \
129 csnip_err_Raise(csnip_err_RANGE, err); \
133 ptr = csnip_mem_aligned_alloc(nAlign, nMember * sizeof(*ptr), \
136 csnip_err_Raise(csnip__err, err); \
155 #define csnip_mem_Realloc(nMember, ptr, err) \
156 csnip_mem__Realloc((nMember), (ptr), (err), csnip__p)
159 #define csnip_mem__Realloc(nMember, ptr, err, p) \
162 SIZE_MAX / sizeof(*ptr) < nMember) { \
163 csnip_err_Raise(csnip_err_RANGE, err); \
166 void* p = realloc(ptr, sizeof(*ptr) * nMember); \
168 csnip_err_Raise(csnip_err_NOMEM, err); \
185 #define csnip_mem_Free(ptr) \
199 #define csnip_mem_AlignedFree(ptr) \
201 csnip_mem_aligned_free(ptr); \
214 inline T* csnip_mem_alloc_cxx(
size_t nMemb, T* typeselect,
int* err)
217 if (SIZE_MAX /
sizeof(T) < nMemb) {
221 return (T*)std::malloc(
sizeof(T) * nMemb);
225 inline T* csnip_mem_calloc_cxx(
size_t nMemb, T* typeselect,
int* err)
228 if (SIZE_MAX /
sizeof(T) < nMemb) {
232 return (T*)std::calloc(nMemb,
sizeof(T));
236 inline T* csnip_mem_aligned_alloc_cxx(
size_t nMemb,
size_t nAlign, T* typeselect,
int* err)
239 if (SIZE_MAX /
sizeof(T) < nMemb) {
247 inline void csnip_mem_realloc_cxx(
size_t nMemb, T** orig,
int* err)
249 if (SIZE_MAX /
sizeof(T) < nMemb) {
253 T* new_ptr = (T*)std::realloc(*orig,
sizeof(T) * nMemb);
261 #define csnip_mem_Alloc(nMember, ptr, err) \
263 int csnip__err = 0; \
265 (ptr) = csnip_mem_alloc_cxx((nMember), (ptr), &csnip__err); \
266 if ((ptr) == NULL) { \
267 csnip_err_Raise(csnip__err, err); \
271 #define csnip_mem_Alloc0(nMember, ptr, err) \
273 int csnip__err = 0; \
275 (ptr) = csnip_mem_calloc_cxx((nMember), (ptr), &csnip__err); \
276 if ((ptr) == NULL) { \
277 csnip_err_Raise(csnip__err, err); \
281 #define csnip_mem_AlignedAlloc(nMember, nAlign, ptr, err) \
283 int csnip__err = 0; \
285 (ptr) = csnip_mem_aligned_alloc_cxx((nMember), (nAlign), \
286 (ptr), &csnip__err); \
287 if ((ptr) == NULL) { \
288 csnip_err_Raise(csnip__err, err); \
292 #define csnip_mem_Realloc(nMember, ptr, err) \
294 int csnip__err = 0; \
295 csnip_mem_realloc_cxx((nMember), &(ptr), &csnip__err);\
297 csnip_err_Raise(csnip__err, err); \
302 #define csnip_mem_Free(ptr) \
308 #define csnip_mem_AlignedFree(ptr) \
310 csnip_mem_aligned_free(ptr); \
322 #if defined(CSNIP_SHORT_NAMES) && !defined(CSNIP_MEM_HAVE_SHORT_NAMES)
323 #define mem_aligned_alloc csnip_mem_aligned_alloc
324 #define mem_Alloc csnip_mem_Alloc
325 #define mem_Alloc0 csnip_mem_Alloc0
326 #define mem_AlignedAlloc csnip_mem_AlignedAlloc
327 #define mem_Realloc csnip_mem_Realloc
328 #define mem_Free csnip_mem_Free
329 #define mem_AlignedFree csnip_mem_AlignedFree
330 #define CSNIP_MEM_HAVE_SHORT_NAMES
#define csnip_err_RANGE
Range error.
Definition: err.h:96
#define csnip_err_NOMEM
Out of memory.
Definition: err.h:94
void csnip_mem_aligned_free(void *mem)
Free aligned memory.
void * csnip_mem_aligned_alloc(size_t nAlign, size_t nSize, int *err)
Allocate aligned memory.