#define __TMALLOC_H__
#include <sys/types.h>
+#include "tools.h"
void * tmalloc(size_t size);
void * trealloc(void * ptr, size_t size);
char * strlower(char * src);
char * strupper(char * src);
int clrspace(char *buf);
+
+/* fast allocate */
+
+#define CNTXCHUNK (64*1024)
+
+typedef struct MemoryChunk {
+ size_t size;
+ size_t freesize;
+ struct MemoryChunk *next;
+ char data[1];
+} MemoryChunk;
+
+#define MEMCHNKHDRSZ offsetof(MemoryChunk, data)
+
+typedef struct MemoryContext {
+ u_int32_t flags;
+ struct MemoryContext *parent;
+ struct MemoryContext *child;
+ MemoryChunk *chunk;
+} MemoryContext;
+
+#define MC_DEBUG 0x01
+
+typedef struct {
+ size_t size;
+ MemoryContext *cntx;
+ char data[1];
+} MCAllocatedSpace;
+
+#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);
+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