diff --git a/evhtp_heap.c b/evhtp_heap.c deleted file mode 100644 index 884b743..0000000 --- a/evhtp_heap.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#include "evhtp-internal.h" -#include "evhtp_heap.h" - -struct evhtp_heap_page_s; -typedef struct evhtp_heap_page_s evhtp_heap_page; - -struct evhtp_heap_page_s { - SLIST_ENTRY(evhtp_heap_page_s) next; - char data[]; -}; - -struct evhtp_heap_s { - size_t page_size; /* page size */ - - SLIST_HEAD(, evhtp_heap_page_s) page_list_free; - SLIST_HEAD(, evhtp_heap_page_s) page_list_used; -}; - - -static evhtp_heap_page * -heap_page_new_(evhtp_heap * heap) { - evhtp_heap_page * page; - - page = malloc(heap->page_size + sizeof(evhtp_heap_page)); - - SLIST_INSERT_HEAD(&heap->page_list_free, page, next); - - return page; -}; - - -static evhtp_heap * -heap_new_(size_t elts, size_t size) { - evhtp_heap * heap; - - if (!(heap = malloc(sizeof(evhtp_heap)))) { - return NULL; - } - - heap->page_size = size; - - SLIST_INIT(&heap->page_list_free); - SLIST_INIT(&heap->page_list_used); - - while (elts-- > 0) { - heap_page_new_(heap); - } - - return heap; -} - -static void -heap_free_(evhtp_heap * heap, void * d) { - evhtp_heap_page * page; - - if (evhtp_unlikely(heap == NULL)) { - return; - } - - evhtp_assert(d != NULL); - - page = (evhtp_heap_page *)((char *)(d - offsetof(evhtp_heap_page, data))); - evhtp_assert(page != NULL); - evhtp_assert(page->data == d); - - SLIST_REMOVE(&heap->page_list_used, page, evhtp_heap_page_s, next); - SLIST_INSERT_HEAD(&heap->page_list_free, page, next); -} - -void -evhtp_heap_free(evhtp_heap * heap, void * data) { - return heap_free_(heap, data); -} - -static void * -heap_alloc_(evhtp_heap * heap) { - evhtp_heap_page * page; - - if (SLIST_EMPTY(&heap->page_list_free)) { - heap_page_new_(heap); - } - - page = SLIST_FIRST(&heap->page_list_free); - evhtp_assert(page != NULL); - - SLIST_REMOVE(&heap->page_list_free, page, evhtp_heap_page_s, next); - SLIST_INSERT_HEAD(&heap->page_list_used, page, next); - - return page->data; -} - -void * -evhtp_heap_alloc(evhtp_heap * heap) { - return heap_alloc_(heap); -} - -evhtp_heap * -evhtp_heap_new(size_t size, size_t elts) { - return heap_new_(elts, size); -} - diff --git a/evhtp_heap.h b/evhtp_heap.h deleted file mode 100644 index 7bbb2bb..0000000 --- a/evhtp_heap.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef __EVHTP_HEAP_H__ -#define __EVHTP_HEAP_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -struct evhtp_heap_s; - -typedef struct evhtp_heap_s evhtp_heap; - -/** - * @brief creates a new heap context - * - * @param size the size of the data to be allocated - * @param nelem the number of elements allocated with the size - * - * @return NULL on error - */ -EVHTP_EXPORT evhtp_heap * evhtp_heap_new(size_t size, size_t elts); - -/** - * @brief returns a single pre-allocated segment of memory from the heap list, - * if there happens to be no entries left, one will be allocated, added to the - * heap and returned. - * - * @param heap - * - * @return a block of data - */ -EVHTP_EXPORT void * evhtp_heap_alloc(evhtp_heap * heap); - -/** - * @brief removes the data entry, and places it back into a unused queue. - * - * @param heap - * @param d data that was returned from evhtp_heap_alloc() - */ -EVHTP_EXPORT void evhtp_heap_free(evhtp_heap * heap, void * data); - -#ifdef __cplusplus -} -#endif - -#endif -