#ifndef KImem #define KImem #include #ifndef KFclean # define Kmsz(e) ( sizeof (e) / sizeof (e) [0] ) #endif typedef enum kmkind { kmkind_none, kmkind_heap, kmkind_pool, kmkind_ref, kmkind_tree } kmkind; typedef enum kmshred { kmshred_yes, kmshred_no } kmshred; typedef struct kmcell { kmkind kind; sz size; kmshred shred; sz refs; struct kmcell* src; char data[]; } kmcell; typedef struct kmptr { kmkind kind; kmshred shred; void* ref; kmcell* cell; } kmptr; #endif