ucx/mempool.h

changeset 17
11dffb40cd91
parent 5
88625853ae74
child 40
a95ee94b9204
--- a/ucx/mempool.h	Fri Aug 16 12:41:30 2013 +0200
+++ b/ucx/mempool.h	Sat Aug 17 12:04:04 2013 +0200
@@ -59,8 +59,10 @@
 typedef struct {
     /** List of pointers to pooled memory. */
     void   **data;
+    
     /** Count of pooled memory items. */
     size_t ndata;
+    
     /** Memory pool size. */
     size_t size;
 } UcxMempool;
@@ -92,6 +94,19 @@
 int ucx_mempool_chcap(UcxMempool *pool, size_t newcap);
 
 /**
+ * Changes the pool size to the next smallest multiple of 16.
+ * 
+ * You may use this macro, to reduce the pool size after freeing
+ * many pooled memory items.
+ * 
+ * @param pool the pool to clamp
+ * @return <code>EXIT_SUCCESS</code> on success or
+ * <code>EXIT_FAILURE</code> on failure
+ */
+#define ucx_mempool_clamp(pool) ucx_mempool_chcap(pool, \
+        (pool->ndata & ~0xF)+0x10)
+
+/**
  * Allocates pooled memory.
  * 
  * @param pool the memory pool
@@ -112,9 +127,15 @@
  * @see ucx_allocator_calloc()
  */
 void *ucx_mempool_calloc(UcxMempool *pool, size_t nelem, size_t elsize);
+
 /**
  * Reallocates pooled memory.
  * 
+ * If the memory to be reallocated is not contained by the specified pool, this
+ * function will possibly fail. In case the memory had to be moved to another
+ * location, this function will print out a message to <code>stderr</code>
+ * and exit the program with error code <code>EXIT_FAILURE</code>.
+ * 
  * @param pool the memory pool
  * @param ptr a pointer to the memory that shall be reallocated
  * @param n the new size of the memory
@@ -122,6 +143,7 @@
  * @see ucx_allocator_realloc()
  */
 void *ucx_mempool_realloc(UcxMempool *pool, void *ptr, size_t n);
+
 /**
  * Frees pooled memory.
  * 

mercurial