2f313d36a367752cb1925bf3b514cc5c11ce343b tdreszer Mon Jan 28 11:45:16 2013 -0800 Added local memeory support for bits and a couple of routines to query lm size. diff --git src/inc/localmem.h src/inc/localmem.h index 7f85558..74f90d7 100644 --- src/inc/localmem.h +++ src/inc/localmem.h @@ -7,46 +7,57 @@ * This file is copyright 2002 Jim Kent, but license is hereby * granted for all use - public, private or commercial. */ #ifndef LOCALMEM_H #define LOCALMEM_H struct lm *lmInit(int blockSize); /* Create a local memory pool. Parameters are: * blockSize - how much system memory to allocate at a time. Can * pass in zero and a reasonable default will be used. */ void lmCleanup(struct lm **pLm); /* Clean up a local memory pool. */ +int lmFlushZ(struct lm *lm); +// Zero's and makes available most recent block of pool, abandoning older blocks +// USE WITH CAUTION: All previous pointers into lm will be invalid + +size_t lmAvailable(struct lm *lm); +// Returns currently available memory in pool + +size_t lmSize(struct lm *lm); +// Returns current size of pool, even for memory already allocated + void *lmAlloc(struct lm *lm, size_t size); /* Allocate memory from local pool. */ -char *lmCloneString(struct lm *lm, char *string); -/* Return local mem copy of string. */ +void *lmAllocMoreMem(struct lm *lm, void *pt, size_t oldSize, size_t newSize); +/* Adjust memory size on a block, possibly relocating it. If block is grown, + * new memory is zeroed. NOTE: in RARE cases, same pointer may be returned, but + * since lm allocs are never freed, the same pointer can be used by lmCloneMem */ +#define lmCloneMem(lm, pt, size) lmAllocMoreMem(lm, pt, size, size) char*lmCloneStringZ(struct lm *lm, char *string, int size); /* Return local mem copy of string of given size, adding null terminator. */ +#define lmCloneString(lm, string) lmCloneStringZ(lm, string, strlen(string)) char *lmCloneFirstWord(struct lm *lm, char *line); /* Clone first word in line */ char *lmCloneSomeWord(struct lm *lm, char *line, int wordIx); /* Return a clone of the given space-delimited word within line. Returns NULL if * not that many words in line. */ struct slName *lmSlName(struct lm *lm, char *name); /* Return slName in memory. */ -void *lmCloneMem(struct lm *lm, void *pt, size_t size); -/* Return a local mem copy of memory block. */ - #define lmAllocVar(lm, pt) (pt = lmAlloc(lm, sizeof(*pt))); /* Shortcut to allocating a single variable in local mem and * assigning pointer to it. */ #define lmAllocArray(lm, pt, size) (pt = lmAlloc(lm, sizeof(*pt) * (size))) /* Shortcut to allocating an array in local mem and * assigning pointer to it. */ #endif//ndef LOCALMEM_H