45#ifndef MD_MALLOC_INCLUDED
46#define MD_MALLOC_INCLUDED
65#define FLATTEN2D(A) (*A)
72#define FLATTEN3D(A) (**A)
79#define FLATTEN4D(A) (***A)
86#define FLATTEN5D(A) (****A)
93#define FLATTEN6D(A) (*****A)
96void*
malloc1d(
size_t dim1_data_size);
99void*
calloc1d(
size_t dim1,
size_t data_size);
102void*
realloc1d(
void* ptr,
size_t dim1_data_size);
105void**
malloc2d(
size_t dim1,
size_t dim2,
size_t data_size);
108void**
calloc2d(
size_t dim1,
size_t dim2,
size_t data_size);
111void**
realloc2d(
void** ptr,
size_t dim1,
size_t dim2,
size_t data_size);
118void**
realloc2d_r(
void** ptr,
size_t new_dim1,
size_t new_dim2,
119 size_t prev_dim1,
size_t prev_dim2,
size_t data_size);
122void***
malloc3d(
size_t dim1,
size_t dim2,
size_t dim3,
size_t data_size);
125void***
calloc3d(
size_t dim1,
size_t dim2,
size_t dim3,
size_t data_size);
128void***
realloc3d(
void*** ptr,
size_t dim1,
size_t dim2,
size_t dim3,
132void***
realloc3d_r(
void*** ptr,
size_t new_dim1,
size_t new_dim2,
133 size_t new_dim3,
size_t prev_dim1,
size_t prev_dim2,
134 size_t prev_dim3,
size_t data_size);
137void****
malloc4d(
size_t dim1,
size_t dim2,
size_t dim3,
size_t dim4,
141void****
calloc4d(
size_t dim1,
size_t dim2,
size_t dim3,
size_t dim4,
145void****
realloc4d(
void**** ptr,
size_t dim1,
size_t dim2,
size_t dim3,
146 size_t dim4,
size_t data_size);
149void*****
malloc5d(
size_t dim1,
size_t dim2,
size_t dim3,
size_t dim4,
150 size_t dim5,
size_t data_size);
153void*****
calloc5d(
size_t dim1,
size_t dim2,
size_t dim3,
size_t dim4,
154 size_t dim5,
size_t data_size);
157void*****
realloc5d(
void***** ptr,
size_t dim1,
size_t dim2,
size_t dim3,
158 size_t dim4,
size_t dim5,
size_t data_size);
161void******
malloc6d(
size_t dim1,
size_t dim2,
size_t dim3,
size_t dim4,
162 size_t dim5,
size_t dim6,
size_t data_size);
165void******
calloc6d(
size_t dim1,
size_t dim2,
size_t dim3,
size_t dim4,
166 size_t dim5,
size_t dim6,
size_t data_size);
169void******
realloc6d(
void****** ptr,
size_t dim1,
size_t dim2,
size_t dim3,
170 size_t dim4,
size_t dim5,
size_t dim6,
size_t data_size);
void ** malloc2d(size_t dim1, size_t dim2, size_t data_size)
2-D malloc (contiguously allocated, so use free() as usual to deallocate)
void **** realloc4d(void ****ptr, size_t dim1, size_t dim2, size_t dim3, size_t dim4, size_t data_size)
4-D realloc which does NOT retain previous data order
void ** realloc2d(void **ptr, size_t dim1, size_t dim2, size_t data_size)
2-D realloc which does NOT retain previous data order
void * malloc1d(size_t dim1_data_size)
1-D malloc (same as malloc, but with error checking)
void ****** malloc6d(size_t dim1, size_t dim2, size_t dim3, size_t dim4, size_t dim5, size_t dim6, size_t data_size)
6-D malloc (contiguously allocated, so use free() as usual to deallocate)
void * calloc1d(size_t dim1, size_t data_size)
1-D calloc (same as calloc, but with error checking)
void ****** realloc6d(void ******ptr, size_t dim1, size_t dim2, size_t dim3, size_t dim4, size_t dim5, size_t dim6, size_t data_size)
6-D realloc which does NOT retain previous data order
void * realloc1d(void *ptr, size_t dim1_data_size)
1-D realloc (same as realloc, but with error checking)
void ***** realloc5d(void *****ptr, size_t dim1, size_t dim2, size_t dim3, size_t dim4, size_t dim5, size_t data_size)
5-D realloc which does NOT retain previous data order
void *** malloc3d(size_t dim1, size_t dim2, size_t dim3, size_t data_size)
3-D malloc (contiguously allocated, so use free() as usual to deallocate)
void *** realloc3d_r(void ***ptr, size_t new_dim1, size_t new_dim2, size_t new_dim3, size_t prev_dim1, size_t prev_dim2, size_t prev_dim3, size_t data_size)
3-D realloc which does retain previous data order
void **** malloc4d(size_t dim1, size_t dim2, size_t dim3, size_t dim4, size_t data_size)
4-D malloc (contiguously allocated, so use free() as usual to deallocate)
void **** calloc4d(size_t dim1, size_t dim2, size_t dim3, size_t dim4, size_t data_size)
4-D calloc (contiguously allocated, so use free() as usual to deallocate)
void ***** calloc5d(size_t dim1, size_t dim2, size_t dim3, size_t dim4, size_t dim5, size_t data_size)
5-D calloc (contiguously allocated, so use free() as usual to deallocate)
void *** realloc3d(void ***ptr, size_t dim1, size_t dim2, size_t dim3, size_t data_size)
3-D realloc which does NOT retain previous data order
void ** realloc2d_r(void **ptr, size_t new_dim1, size_t new_dim2, size_t prev_dim1, size_t prev_dim2, size_t data_size)
2-D realloc which does retain previous data order
void ** calloc2d(size_t dim1, size_t dim2, size_t data_size)
2-D calloc (contiguously allocated, so use free() as usual to deallocate)
void ***** malloc5d(size_t dim1, size_t dim2, size_t dim3, size_t dim4, size_t dim5, size_t data_size)
5-D malloc (contiguously allocated, so use free() as usual to deallocate)
void *** calloc3d(size_t dim1, size_t dim2, size_t dim3, size_t data_size)
3-D calloc (contiguously allocated, so use free() as usual to deallocate)
void ****** calloc6d(size_t dim1, size_t dim2, size_t dim3, size_t dim4, size_t dim5, size_t dim6, size_t data_size)
6-D malloc (contiguously allocated, so use free() as usual to deallocate)