@@ -11,13 +11,20 @@ #endif typedef enum kmcond { kmcond_ok, + kmcond_unnecessary, + + kmcond_fail, + kmcond_unhandled, + kmcond_mismatch, kmcond_bad_address, } kmcond; typedef enum kmkind { kmkind_none, + kmkind_fail, + kmkind_linear, kmkind_heap, kmkind_pool, kmkind_ref, kmkind_tree @@ -27,29 +34,49 @@ kmshred_yes, kmshred_no } kmshred; -typedef struct kmcell { +typedef struct kmbox { kmkind kind; sz size; kmshred shred; +} kmbox; + +typedef struct kmcell { + kmbox header; sz refs; struct kmcell* src; } kmcell; + +typedef struct kmnode { + kmbox header; + struct kmnode* origin, + * branch, + * next, + * prev; +} kmnode; typedef struct kmptr { kmkind kind; kmshred shred; void* ref; - kmcell* cell; } kmptr; /* heap functions */ void* kmheapa(sz); +kmptr kmheapao(sz); kmcond kmheapf(void*); + +/* generic functions */ + +kmcond kmfree(kmptr); +kmkind kmtell(void*); +void kmzero(void*,sz); +void kmozero(kmptr); + #ifdef __cplusplus } #endif #endif