43 *
m->p = (
char *)(*
m->p) -
i*
m->size;
46 else if (
i >= r->
end) {
50 *
m->p = (
char *)(*
m->p) - r->
start*
m->size;
61 *
m->p = (
char *)(*
m->p) -
i*
m->size;
78 if (
i == r->
end - 1) {
87 for (
i =
i + 1;
i < r->
end &&
88 !*(
void **)((
char *)(*mem->
p) +
i*mem->
size);
i++);
91 (
char *)(*
m->p) +
i*
m->size,
m->size*(r->
end -
i));
93 m->size*(r->
end -
i));
94 *
m->p = (
char *)(*
m->p) -
i*
m->size;
99 else if (
i == r->
end - 1) {
101 !*(
void **)((
char *)(*mem->
p) +
i*mem->
size);
i--);
106 *
m->p = (
char *)(*
m->p) - r->
start*
m->size;
112 memset ((
char *)(*
m->p) +
i*
m->size, 0,
m->size);
140#define Memindex struct _Memindex *
148# define mem_allocated(m,i) \
149 ((i) >= (m)->r1.start && (i) < (m->r1.end) && \
151# define mem_data(m,i) ((m)->b[i])
153# define mem_allocated(m,i,j) \
154 ((i) >= (m)->r1.start && (i) < (m->r1.end) && \
156 (j) >= (m)->r2[i].start && (j) < (m)->r2[i].end && \
158# define mem_data(m,i,j) ((m)->b[i][j])
160# define mem_allocated(m,i,j,k) \
161 ((i) >= (m)->r1.start && (i) < (m->r1.end) && \
163 (j) >= (m)->r2[i].start && (j) < (m)->r2[i].end && \
165 (k) >= (m)->r3[i][j].start && (k) < (m)->r3[i][j].end && \
167# define mem_data(m,i,j,k) ((m)->b[i][j][k])
186 for (
int i =
m->r1.start;
i <
m->r1.end;
i++)
189 for (
int j =
m->r2[
i].start;
j <
m->r2[
i].end;
j++)
197 free (
m->r2 +
m->r1.start);
199 free (
m->r3 +
m->r1.start);
204 free (
m->b +
m->r1.start);
214 Memalloc mem[] = {{(
void **)&
m->b,
sizeof(
char *)},
222 Memalloc mem[] = {{(
void **)&
m->b,
sizeof(
char **)},
234 Memalloc mem[] = {{(
void **)&
m->b,
sizeof(
char ***)},
256 Memalloc mem[] = {{(
void **)&
m->b,
sizeof(
char *)},
263 Memalloc mem[] = {{(
void **)&
m->b[
i],
sizeof(
char *)},
266 Memalloc mem[] = {{(
void **)&
m->b,
sizeof(
char **)},
275 Memalloc mem[] = {{(
void **)&
m->b[
i][
j],
sizeof(
char *)},
278 Memalloc mem[] = {{(
void **)&
m->b[
i],
sizeof(
char **)},
282 Memalloc mem[] = {{(
void **)&
m->b,
sizeof(
char ***)},
define m((k)==0 &&(l)==0 &&(m)==0) macro2 foreach_point(double _x=0.
define sysmalloc malloc define syscalloc calloc define sysrealloc realloc define sysfree free define systrdup strdup define line calloc(n, s) @ define prealloc(p
define sysmalloc malloc define syscalloc calloc define sysrealloc realloc define sysfree free define systrdup strdup define line line realloc(p, s) @ define pfree(p
*cs[i, 0, 0] a *[i -1, 0, 0] j
macro
We also redefine the "per field" (inner) traversal.
struct _Memindex * mem_new(int len)
The mem_new() function returns a new (empty) Memindex.
bool memrange_free(Memrange *r, Memalloc *mem, int i)
void memrange_alloc(Memrange *r, Memalloc *mem, int i)
macro foreach_mem(struct _Memindex *index, int len, int _i)
The foreach_mem() macro traverses every _i allocated elements of array _m taking into account a perio...
void mem_free(struct _Memindex *m, int i, int j, int len, void *b)
The mem_free() function frees a given index.
void mem_assign(struct _Memindex *m, int i, int j, int len, void *b)
The mem_assign() function assigns a (pointer) value to a given index.
#define mem_data(m, i, j)
void mem_destroy(struct _Memindex *m, int len)
The mem_destroy() function frees all the memory allocated by a given Memindex.