Skip to content
Snippets Groups Projects
Commit 21ed0edc authored by Fredrik Hübinette (Hubbe)'s avatar Fredrik Hübinette (Hubbe)
Browse files

new file to facilitate DEBUG_MALLOC (and other things)

Rev: src/block_alloc.h:1.1
parent b234d191
No related branches found
No related tags found
No related merge requests found
#define INIT_BLOCK(X)
#define EXIT_BLOCK(X)
#define BLOCK_ALLOC(DATA,BSIZE) \
\
struct PIKE_CONCAT(DATA,_block) \
{ \
struct PIKE_CONCAT(DATA,_block) *next; \
struct DATA x[BSIZE]; \
}; \
\
static struct PIKE_CONCAT(DATA,_block) *PIKE_CONCAT(DATA,_blocks)=0; \
static struct DATA *PIKE_CONCAT3(free_,DATA,s)=0; \
\
struct DATA *PIKE_CONCAT(alloc_,DATA)(void) \
{ \
struct DATA *tmp; \
if(!PIKE_CONCAT3(free_,DATA,s)) \
{ \
struct PIKE_CONCAT(DATA,_block) *n; \
int e; \
n=(struct PIKE_CONCAT(DATA,_block) *)malloc(sizeof(struct PIKE_CONCAT(DATA,_block))); \
if(!n) \
{ \
fprintf(stderr,"Fatal: out of memory.\n"); \
exit(17); \
} \
n->next=PIKE_CONCAT(DATA,_blocks); \
PIKE_CONCAT(DATA,_blocks)=n; \
\
for(e=0;e<BSIZE;e++) \
{ \
n->x[e].next=PIKE_CONCAT3(free_,DATA,s); \
PIKE_CONCAT3(free_,DATA,s)=n->x+e; \
} \
} \
\
tmp=PIKE_CONCAT3(free_,DATA,s); \
PIKE_CONCAT3(free_,DATA,s)=tmp->next; \
INIT_BLOCK(tmp); \
return tmp; \
} \
\
inline void PIKE_CONCAT(free_,DATA)(struct DATA *d) \
{ \
EXIT_BLOCK(d); \
d->next=PIKE_CONCAT3(free_,DATA,s); \
PIKE_CONCAT3(free_,DATA,s)=d; \
} \
\
void PIKE_CONCAT3(free_all_,DATA,_blocks)(void) \
{ \
struct PIKE_CONCAT(DATA,_block) *tmp; \
while((tmp=PIKE_CONCAT(DATA,_blocks))) \
{ \
PIKE_CONCAT(DATA,_blocks)=tmp->next; \
free((char *)tmp); \
} \
PIKE_CONCAT(DATA,_blocks)=0; \
} \
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment