Refactor to use new protocol module and sipo.
[bertos.git] / bertos / struct / heap.c
index b8d06701cbc04c9dd8766cf71743d1d3ae019f49..4c00bd7ca0ed1ebd3b24a6048b6b8f26b8112d24 100644 (file)
@@ -32,7 +32,6 @@
  *
  * \brief Heap subsystem (public interface).
  *
- * \version $Id$
  * \author Bernie Innocenti <bernie@codewiz.org>
  */
 
@@ -48,7 +47,7 @@
 /*
  * This function prototype is deprecated, will change in:
  * void heap_init(struct Heap* h, heap_buf_t* memory, size_t size)
- * in the nex BeRTOS release.
+ * in the next BeRTOS release.
  */
 void heap_init(struct Heap* h, void* memory, size_t size)
 {
@@ -184,8 +183,30 @@ void heap_freemem(struct Heap* h, void *mem, size_t size)
        }
 }
 
+/**
+ * Returns the number of free bytes in a heap.
+ * \param h the heap to check.
+ *
+ * \note The returned value is the sum of all free memory regions 
+ *       in the heap.
+ *       Those regions are likely to be *not* contiguous,
+ *       so a successive allocation may fail even if the
+ *       requested amount of memory is lower than the current free space.
+ */
+size_t heap_freeSpace(struct Heap *h)
+{
+       size_t free_mem = 0;
+       for (MemChunk *chunk = h->FreeList; chunk; chunk = chunk->next)
+               free_mem += chunk->size;
+
+       return free_mem;
+}
+
 #if CONFIG_HEAP_MALLOC
 
+/**
+ * Standard malloc interface
+ */
 void *heap_malloc(struct Heap* h, size_t size)
 {
        size_t *mem;
@@ -197,6 +218,9 @@ void *heap_malloc(struct Heap* h, size_t size)
        return mem;
 }
 
+/**
+ * Standard calloc interface
+ */
 void *heap_calloc(struct Heap* h, size_t size)
 {
        void *mem;