X-Git-Url: http://sigaev.ru/git/gitweb.cgi?a=blobdiff_plain;f=tmalloc.h;h=89648de793d521f162c272667474d0804efa08c5;hb=HEAD;hp=a39a3ff5c7db9b3102e10d010a50ca7645698187;hpb=616042000fa85135606f626940ca1c73d3a58b36;p=tedtools.git diff --git a/tmalloc.h b/tmalloc.h index a39a3ff..89648de 100644 --- a/tmalloc.h +++ b/tmalloc.h @@ -46,7 +46,7 @@ int clrspace(char *buf); /* fast allocate */ -#define CNTXCHUNK (1024*1024) +#define CNTXCHUNK (64*1024) typedef struct MemoryChunk { size_t size; @@ -55,7 +55,7 @@ typedef struct MemoryChunk { char data[1]; } MemoryChunk; -#define MEMCHNKHDRSZ ( sizeof(u_int32_t)*2 + sizeof(MemoryChunk*) ) +#define MEMCHNKHDRSZ offsetof(MemoryChunk, data) typedef struct MemoryContext { u_int32_t flags; @@ -72,11 +72,12 @@ typedef struct { char data[1]; } MCAllocatedSpace; -#define MCASHDRSZ ( sizeof(size_t) + sizeof(MemoryContext*) ) +#define MCASHDRSZ offsetof(MCAllocatedSpace, data) #define MCMAGICKNUMBER (0xFE0FBEEF) MemoryContext *allocMemoryContext(MemoryContext* parent, int flags); void freeMemoryContext(MemoryContext* cntx); +void resetMemoryContext(MemoryContext* cntx); void* mcalloc(MemoryContext *cntx, size_t size); void* mc0alloc(MemoryContext *cntx, size_t size); void* mcrealloc(void * ptr, size_t size); @@ -84,5 +85,20 @@ void mcfree(void * ptr); char * mcstrdup(MemoryContext *cntx, char * src); char * mcnstrdup(MemoryContext *cntx, char *src, int len); +typedef void* (*MemAlloc)(void *ptr, size_t size); + +typedef struct { + char *buf; + char *ptr; + u_int32_t len; + MemoryContext *mc; + MemAlloc memalloc; +} StringBuffer; + +StringBuffer* initStringBuffer(StringBuffer* state, int initsize); +StringBuffer* initStringBufferMC(StringBuffer* state, MemoryContext *mc, int initsize); +StringBuffer* initStringBufferMA(StringBuffer* state, MemAlloc memalloc, int initsize); +StringBuffer* appendStringBuffer( StringBuffer *state, char *string, int stringlen); +StringBuffer* printStringBuffer( StringBuffer *state, const char *format, ...); #endif