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