#include #include "mk.h" int nhc_sizePackedString(int length) { int size = (length + sizeof(Node) -1) / sizeof(Node); return (1+EXTRA+size); } NodePtr nhc_allocPackedString(int length) { NodePtr n; int size = (length + sizeof(Node) -1) / sizeof(Node); int extra = size * sizeof(Node) - length; n = C_ALLOC(1+EXTRA+size); *n = CONSTRW(size,extra); INIT_PROFINFO(n,&dummyProfInfo) return n; } void nhc_copyPackedString(int length, NodePtr dst, char *src) { if (src==(char*)0) memcpy((char*)&dst[1+EXTRA],"\0",1); else memcpy((char*)&dst[1+EXTRA],src,length); } NodePtr nhc_mkPackedString(int length, char *str) { NodePtr n = nhc_allocPackedString(length); nhc_copyPackedString(length,n,str); return n; } char *nhc_getPackedString(NodePtr n) { return (char*)&n[1+EXTRA]; }