From 929e4cfe463bb5e41583d915b8609fcf99c86ca1 Mon Sep 17 00:00:00 2001 From: ken Date: Mon, 3 Oct 2016 13:55:50 -0700 Subject: [PATCH] example stack implementation --- src/apc/irmem.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/apc/irmem.c b/src/apc/irmem.c index 140a16a..5b4fb57 100644 --- a/src/apc/irmem.c +++ b/src/apc/irmem.c @@ -63,10 +63,30 @@ int num_odats = 0; void* odat_buf[MAX_CHUNKS]; long odats_per_page; -int num_vdat_chunks = 0; -int num_vdats = 0; -void* vdat_buf[MAX_CHUNKS]; -long vdats_per_page; + +//"type free" chunk stacking +struct chunk_stack +{ void* chunks[MAX_CHUNKS]; + void* csp; //chunk stack pointer + void* dsp[MAX_CHUNKS]; //dat stack pointer (per chunk) +} ocs, vcs, ccs; //odat, vdat, and cdat chunk stacks + +//type safety handled by macro expansion +#define CHUNK_LEN(STACK) ((STACK).csp - (STACK).chunks) +#define CURRENT_DAT(STACK,TYPE) ((TYPE)(STACK.dsp[CHUNK_LEN(STACK)]) +#define INCREMENT_DAT(STACK,TYPE) (++CURRENT_DAT(STACK,TYPE)) +//Stack-specific macros +#define CURRENT_ODAT() (CURRENT_DAT(ocs,struct odat*)) +#define CURRENT_VDAT() (CURRENT_DAT(vcs,struct vdat*)) +#define CURRENT_CDAT() (CURRENT_DAT(ccs,struct cdat*)) +//Metadata +#define CURRENT_MODEL() (CURRENT_VDAT()->model_list[CURRENT_VDAT()->num_models]) + + +int num_vdat_chunks = 0; +int num_vdats = 0; +struct vdat* vdat_buf[MAX_CHUNKS]; +long vdats_per_page; int num_ref_chunks = 0; int num_refs = 0; -- 2.18.0