diff options
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c | 1078 |
1 files changed, 0 insertions, 1078 deletions
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c deleted file mode 100644 index cce28e0ed07..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c +++ /dev/null @@ -1,1078 +0,0 @@ - -#include "utilmemheap.h" -#include "utilmemallc.h" - -#define pyre_alloc8(heap, space) ((pyre8 *)((heap->flags & HEAP_ZERO) ? util_calloc(1, sizeof(pyre8) + space * sizeof(uint8_t)) : util_malloc(sizeof(pyre8) + space * sizeof(uint8_t)))) -#define pyre_alloc16(heap, space) ((pyre16 *)((heap->flags & HEAP_ZERO) ? util_calloc(1, sizeof(pyre16) + space * sizeof(uint8_t)) : util_malloc(sizeof(pyre16) + space * sizeof(uint8_t)))) -#define pyre_alloc32(heap, space) ((pyre32 *)((heap->flags & HEAP_ZERO) ? util_calloc(1, sizeof(pyre32) + space * sizeof(uint8_t)) : util_malloc(sizeof(pyre32) + space * sizeof(uint8_t)))) -#define pyre_alloc64(heap, space) ((pyre64 *)((heap->flags & HEAP_ZERO) ? util_calloc(1, sizeof(pyre64) + space * sizeof(uint8_t)) : util_malloc(sizeof(pyre64) + space * sizeof(uint8_t)))) - -#define pyre_free(pyre) util_free(pyre) - -/* block reset */ - -#define reset_heap_head8(heap, pyre, used) \ - ((used = block_used8(pyre)), (pyre->data -= used), ((heap->flags & HEAP_ZERO) ? (memset(pyre->data, 0, used), 0) : 0), (pyre->left += (uint8_t)used)) -#define reset_heap_head16(heap, pyre, used) \ - ((used = block_used16(pyre)), (pyre->data -= used), ((heap->flags & HEAP_ZERO) ? (memset(pyre->data, 0, used), 0) : 0), (pyre->left += (uint16_t)used)) -#define reset_heap_head32(heap, pyre, used) \ - ((used = block_used32(pyre)), (pyre->data -= used), ((heap->flags & HEAP_ZERO) ? (memset(pyre->data, 0, used), 0) : 0), (pyre->left += (uint32_t)used)) -#define reset_heap_head64(heap, pyre, used) \ - ((used = block_used64(pyre)), (pyre->data -= used), ((heap->flags & HEAP_ZERO) ? (memset(pyre->data, 0, used), 0) : 0), (pyre->left += (uint64_t)used)) - -/* init heap */ - -heap8 * heap8_init (heap8 *heap, uint8_t space, uint8_t large, uint8_t flags) -{ - align_space8(space); - if (large > space) large = space; - heap->head = NULL; - heap->space = space; - heap->large = large; - heap->flags = flags; - return heap; -} - -heap16 * heap16_init (heap16 *heap, uint16_t space, uint16_t large, uint8_t flags) -{ - align_space16(space); - if (large > space) large = space; - heap->head = NULL; - heap->space = space; - heap->large = large; - heap->flags = flags; - return heap; -} - -heap32 * heap32_init (heap32 *heap, uint32_t space, uint32_t large, uint8_t flags) -{ - align_space32(space); - if (large > space) large = space; - heap->head = NULL; - heap->space = space; - heap->large = large; - heap->flags = flags; - return heap; -} - -heap64 * heap64_init (heap64 *heap, uint64_t space, uint64_t large, uint8_t flags) -{ - align_space64(space); - if (large > space) large = space; - heap->head = NULL; - heap->space = space; - heap->large = large; - heap->flags = flags; - return heap; -} - -/* free heap */ - -void heap8_free (heap8 *heap) -{ - pyre8 *pyre, *prev; - pyre = heap->head; - heap->head = NULL; - while (pyre != NULL) - { - prev = pyre->prev; - pyre_free(pyre); - pyre = prev; - } -} - -void heap16_free (heap16 *heap) -{ - pyre16 *pyre, *prev; - pyre = heap->head; - heap->head = NULL; - while (pyre != NULL) - { - prev = pyre->prev; - pyre_free(pyre); - pyre = prev; - } -} - -void heap32_free (heap32 *heap) -{ - pyre32 *pyre, *prev; - pyre = heap->head; - heap->head = NULL; - while (pyre != NULL) - { - prev = pyre->prev; - pyre_free(pyre); - pyre = prev; - } -} - -void heap64_free (heap64 *heap) -{ - pyre64 *pyre, *prev; - pyre = heap->head; - heap->head = NULL; - while (pyre != NULL) - { - prev = pyre->prev; - pyre_free(pyre); - pyre = prev; - } -} - -/* clear heap */ - -void heap8_clear (heap8 *heap) -{ - pyre8 *pyre, *prev; - size_t used; - if ((pyre = heap->head) == NULL) - return; - prev = pyre->prev; - pyre->prev = NULL; - reset_heap_head8(heap, pyre, used); - for (; prev != NULL; prev = pyre) - { - pyre = prev->prev; - pyre_free(prev); - } -} - -void heap16_clear (heap16 *heap) -{ - pyre16 *pyre, *prev; - size_t used; - if ((pyre = heap->head) == NULL) - return; - prev = pyre->prev; - pyre->prev = NULL; - reset_heap_head16(heap, pyre, used); - for (; prev != NULL; prev = pyre) - { - pyre = prev->prev; - pyre_free(prev); - } -} - -void heap32_clear (heap32 *heap) -{ - pyre32 *pyre, *prev; - size_t used; - if ((pyre = heap->head) == NULL) - return; - prev = pyre->prev; - pyre->prev = NULL; - reset_heap_head32(heap, pyre, used); - for (; prev != NULL; prev = pyre) - { - pyre = prev->prev; - pyre_free(prev); - } -} - -void heap64_clear (heap64 *heap) -{ - pyre64 *pyre, *prev; - size_t used; - if ((pyre = heap->head) == NULL) - return; - prev = pyre->prev; - pyre->prev = NULL; - reset_heap_head64(heap, pyre, used); - for (; prev != NULL; prev = pyre) - { - pyre = prev->prev; - pyre_free(prev); - } -} - -/* heap head */ - -void heap8_head (heap8 *heap) -{ - pyre8 *pyre; - heap->head = pyre = pyre_alloc8(heap, heap->space); - pyre->prev = NULL; - pyre->data = block_edge8(pyre); - pyre->left = block_left8(pyre, heap->space); - pyre->chunks = 0; -} - -void heap16_head (heap16 *heap) -{ - pyre16 *pyre; - heap->head = pyre = pyre_alloc16(heap, heap->space); - pyre->prev = NULL; - pyre->data = block_edge16(pyre); - pyre->left = block_left16(pyre, heap->space); - pyre->chunks = 0; -} - -void heap32_head (heap32 *heap) -{ - pyre32 *pyre; - heap->head = pyre = pyre_alloc32(heap, heap->space); - pyre->prev = NULL; - pyre->data = block_edge32(pyre); - pyre->left = block_left32(pyre, heap->space); - pyre->chunks = 0; -} - -void heap64_head (heap64 *heap) -{ - pyre64 *pyre; - heap->head = pyre = pyre_alloc64(heap, heap->space); - pyre->prev = NULL; - pyre->data = block_edge64(pyre); - pyre->left = block_left64(pyre, heap->space); - pyre->chunks = 0; -} - -/* next heap head */ - -static pyre8 * heap8_new (heap8 *heap) -{ - pyre8 *pyre; - pyre = pyre_alloc8(heap, heap->space); - pyre->prev = heap->head; - heap->head = pyre; - pyre->data = block_edge8(pyre); - pyre->left = block_left8(pyre, heap->space); - pyre->chunks = 0; - return pyre; -} - -static pyre16 * heap16_new (heap16 *heap) -{ - pyre16 *pyre; - pyre = pyre_alloc16(heap, heap->space); - pyre->prev = heap->head; - heap->head = pyre; - pyre->data = block_edge16(pyre); - pyre->left = block_left16(pyre, heap->space); - pyre->chunks = 0; - return pyre; -} - -static pyre32 * heap32_new (heap32 *heap) -{ - pyre32 *pyre; - pyre = pyre_alloc32(heap, heap->space); - pyre->prev = heap->head; - heap->head = pyre; - pyre->data = block_edge32(pyre); - pyre->left = block_left32(pyre, heap->space); - pyre->chunks = 0; - return pyre; -} - -static pyre64 * heap64_new (heap64 *heap) -{ - pyre64 *pyre; - pyre = pyre_alloc64(heap, heap->space); - pyre->prev = heap->head; - heap->head = pyre; - pyre->data = block_edge64(pyre); - pyre->left = block_left64(pyre, heap->space); - pyre->chunks = 0; - return pyre; -} - -/* next heap sole */ - -static pyre8 * heap8_sole (heap8 *heap, size_t size) -{ - pyre8 *pyre, *head, *prev; - pyre = pyre_alloc8(heap, size); - head = heap->head; - prev = head->prev; - pyre->prev = prev; - head->prev = pyre; - pyre->data = block_edge8(pyre); - pyre->left = 0; // (uint8_t)size makes no sense, even with buffer api it will finally become 0 - return pyre; -} - -static pyre16 * heap16_sole (heap16 *heap, size_t size) -{ - pyre16 *pyre, *head, *prev; - pyre = pyre_alloc16(heap, size); - head = heap->head; - prev = head->prev; - pyre->prev = prev; - head->prev = pyre; - pyre->data = block_edge16(pyre); - pyre->left = 0; - return pyre; -} - -static pyre32 * heap32_sole (heap32 *heap, size_t size) -{ - pyre32 *pyre, *head, *prev; - pyre = pyre_alloc32(heap, size); - head = heap->head; - prev = head->prev; - pyre->prev = prev; - head->prev = pyre; - pyre->data = block_edge32(pyre); - pyre->left = 0; - return pyre; -} - -static pyre64 * heap64_sole (heap64 *heap, size_t size) -{ - pyre64 *pyre, *head, *prev; - pyre = pyre_alloc64(heap, size); - head = heap->head; - prev = head->prev; - pyre->prev = prev; - head->prev = pyre; - pyre->data = block_edge64(pyre); - pyre->left = 0; - return pyre; -} - -/* take from heap */ - -#define pyre_next8(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->left -= (uint8_t)size, ++pyre->chunks) -#define pyre_next16(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->left -= (uint16_t)size, ++pyre->chunks) -#define pyre_next32(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->left -= (uint32_t)size, ++pyre->chunks) -#define pyre_next64(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->left -= (uint64_t)size, ++pyre->chunks) - -// for sole blocks, block->left is permanently 0, we can't store size_t there -#define pyre_last8(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->chunks = 1) -#define pyre_last16(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->chunks = 1) -#define pyre_last32(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->chunks = 1) -#define pyre_last64(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->chunks = 1) - -void * _heap8_take (heap8 *heap, size_t size) -{ - pyre8 *pyre; - void *data; - pyre = heap->head; - align_size8(size); - if (size <= pyre->left) - { - pyre_next8(data, pyre, size); - } - else if (take_new_block8(heap, pyre8, pyre, size)) - { - pyre = heap8_new(heap); - pyre_next8(data, pyre, size); - } - else - { - pyre = heap8_sole(heap, size); - pyre_last8(data, pyre, size); - } - return data; -} - -void * _heap16_take (heap16 *heap, size_t size) -{ - pyre16 *pyre; - void *data; - pyre = heap->head; - align_size16(size); - if (size <= pyre->left) - { - pyre_next16(data, pyre, size); - } - else if (take_new_block16(heap, pyre16, pyre, size)) - { - pyre = heap16_new(heap); - pyre_next16(data, pyre, size); - } - else - { - pyre = heap16_sole(heap, size); - pyre_last16(data, pyre, size); - } - return data; -} - -void * _heap32_take (heap32 *heap, size_t size) -{ - pyre32 *pyre; - void *data; - pyre = heap->head; - align_size32(size); - if (size <= pyre->left) - { - pyre_next32(data, pyre, size); - } - else if (take_new_block32(heap, pyre32, pyre, size)) - { - pyre = heap32_new(heap); - pyre_next32(data, pyre, size); - } - else - { - pyre = heap32_sole(heap, size); - pyre_last32(data, pyre, size); - } - return data; -} - -void * _heap64_take (heap64 *heap, size_t size) -{ - pyre64 *pyre; - void *data; - pyre = heap->head; - align_size64(size); - if (size <= pyre->left) - { - pyre_next64(data, pyre, size); - } - else if (take_new_block64(heap, pyre64, pyre, size)) - { - pyre = heap64_new(heap); - pyre_next64(data, pyre, size); - } - else - { - pyre = heap64_sole(heap, size); - pyre_last64(data, pyre, size); - } - return data; -} - -void * _heap8_take0 (heap8 *heap, size_t size) -{ - return memset(_heap8_take(heap, size), 0, size); -} - -void * _heap16_take0 (heap16 *heap, size_t size) -{ - return memset(_heap16_take(heap, size), 0, size); -} - -void * _heap32_take0 (heap32 *heap, size_t size) -{ - return memset(_heap32_take(heap, size), 0, size); -} - -void * _heap64_take0 (heap64 *heap, size_t size) -{ - return memset(_heap64_take(heap, size), 0, size); -} - -/* pop last heap chunk */ - -#define taken_from_head(taken, head) (byte_data(taken) == head->data) -#define taken_from_sole(taken, head, sole) ((sole = head->prev) != NULL && byte_data(taken) == sole->data) - -#define taken_prev_head(taken, head, size) (byte_data(taken) == head->data - size) -#define taken_prev_sole(taken, head, sole, size) ((sole = head->prev) != NULL && byte_data(taken) == sole->data - size) - -void heap8_pop (heap8 *heap, void *taken, size_t size) -{ - pyre8 *pyre, *head; - head = heap->head; - align_size8(size); - if (taken_prev_head(taken, head, size)) - { - - head->data -= size; - head->left += (uint8_t)size; - --head->chunks; - } - else if (taken_prev_sole(taken, head, pyre, size)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } - else - { - ASSERT8(0); - } -} - -void heap16_pop (heap16 *heap, void *taken, size_t size) -{ - pyre16 *pyre, *head; - head = heap->head; - align_size16(size); - if (taken_prev_head(taken, head, size)) - { - - head->data -= size; - head->left += (uint16_t)size; - --head->chunks; - } - else if (taken_prev_sole(taken, head, pyre, size)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } - else - { - ASSERT16(0); - } -} - -void heap32_pop (heap32 *heap, void *taken, size_t size) -{ - pyre32 *pyre, *head; - head = heap->head; - align_size32(size); - if (taken_prev_head(taken, head, size)) - { - - head->data -= size; - head->left += (uint32_t)size; - --head->chunks; - } - else if (taken_prev_sole(taken, head, pyre, size)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } - else - { - ASSERT32(0); - } -} - -void heap64_pop (heap64 *heap, void *taken, size_t size) -{ - pyre64 *pyre, *head; - head = heap->head; - align_size64(size); - if (taken_prev_head(taken, head, size)) - { - - head->data -= size; - head->left += (uint64_t)size; - --head->chunks; - } - else if (taken_prev_sole(taken, head, pyre, size)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } - else - { - ASSERT64(0); - } -} - -/* heap buffer */ - -void * _heap8_some (heap8 *heap, size_t size, size_t *pspace) -{ - pyre8 *pyre; - pyre = heap->head; - align_size8(size); - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block8(heap, pyre8, pyre, size)) - { - pyre = heap8_new(heap); - *pspace = pyre->left; - } - else - { - pyre = heap8_sole(heap, size); - *pspace = size; - } - return void_data(pyre->data); -} - -void * _heap16_some (heap16 *heap, size_t size, size_t *pspace) -{ - pyre16 *pyre; - pyre = heap->head; - align_size16(size); - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block16(heap, pyre16, pyre, size)) - { - pyre = heap16_new(heap); - *pspace = pyre->left; - } - else - { - pyre = heap16_sole(heap, size); - *pspace = size; - } - return void_data(pyre->data); -} - -void * _heap32_some (heap32 *heap, size_t size, size_t *pspace) -{ - pyre32 *pyre; - pyre = heap->head; - align_size32(size); - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block32(heap, pyre32, pyre, size)) - { - pyre = heap32_new(heap); - *pspace = pyre->left; - } - else - { - pyre = heap32_sole(heap, size); - *pspace = size; - } - return void_data(pyre->data); -} - -void * _heap64_some (heap64 *heap, size_t size, size_t *pspace) -{ - pyre64 *pyre; - pyre = heap->head; - align_size64(size); - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block64(heap, pyre64, pyre, size)) - { - pyre = heap64_new(heap); - *pspace = pyre->left; - } - else - { - pyre = heap64_sole(heap, size); - *pspace = size; - } - return void_data(pyre->data); -} - -void * heap8_more (heap8 *heap, void *taken, size_t written, size_t size, size_t *pspace) -{ - pyre8 *pyre, *prev; - pyre = heap->head; - align_size8(size); - if (taken_from_head(taken, pyre)) - { - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block8(heap, pyre8, pyre, size)) - { - pyre = heap8_new(heap); - memcpy(pyre->data, taken, written); - *pspace = pyre->left; - } - else - { - pyre = heap8_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - } - } - else if (taken_from_sole(taken, pyre, prev)) - { - pyre = heap8_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - pyre->prev = prev->prev; - pyre_free(prev); - } - else - { - ASSERT8(0); - *pspace = 0; - return NULL; - } - return void_data(pyre->data); -} - -void * heap16_more (heap16 *heap, void *taken, size_t written, size_t size, size_t *pspace) -{ - pyre16 *pyre, *prev; - pyre = heap->head; - align_size16(size); - if (taken_from_head(taken, pyre)) - { - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block16(heap, pyre16, pyre, size)) - { - pyre = heap16_new(heap); - memcpy(pyre->data, taken, written); - *pspace = pyre->left; - } - else - { - pyre = heap16_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - } - } - else if (taken_from_sole(taken, pyre, prev)) - { - pyre = heap16_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - pyre->prev = prev->prev; - pyre_free(prev); - } - else - { - ASSERT16(0); - *pspace = 0; - return NULL; - } - return void_data(pyre->data); -} - -void * heap32_more (heap32 *heap, void *taken, size_t written, size_t size, size_t *pspace) -{ - pyre32 *pyre, *prev; - pyre = heap->head; - align_size32(size); - if (taken_from_head(taken, pyre)) - { - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block32(heap, pyre32, pyre, size)) - { - pyre = heap32_new(heap); - memcpy(pyre->data, taken, written); - *pspace = pyre->left; - } - else - { - pyre = heap32_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - } - } - else if (taken_from_sole(taken, pyre, prev)) - { - pyre = heap32_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - pyre->prev = prev->prev; - pyre_free(prev); - } - else - { - ASSERT32(0); - *pspace = 0; - return NULL; - } - return void_data(pyre->data); -} - -void * heap64_more (heap64 *heap, void *taken, size_t written, size_t size, size_t *pspace) -{ - pyre64 *pyre, *prev; - pyre = heap->head; - align_size64(size); - if (taken_from_head(taken, pyre)) - { - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block64(heap, pyre64, pyre, size)) - { - pyre = heap64_new(heap); - memcpy(pyre->data, taken, written); - *pspace = pyre->left; - } - else - { - pyre = heap64_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - } - } - else if (taken_from_sole(taken, pyre, prev)) - { - pyre = heap64_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - pyre->prev = prev->prev; - pyre_free(prev); - } - else - { - ASSERT64(0); - *pspace = 0; - return NULL; - } - return void_data(pyre->data); -} - -void heap8_done (heap8 *heap, void *taken, size_t written) -{ - pyre8 *pyre; - pyre = heap->head; - align_size8(written); - if (taken_from_head(taken, pyre)) - { - pyre->data += written; - pyre->left -= (uint8_t)written; - ++pyre->chunks; - } - else if (taken_from_sole(taken, pyre, pyre)) - { - pyre->data += written; - pyre->chunks = 1; - } - else - { - ASSERT8(0); - } -} - -void heap16_done (heap16 *heap, void *taken, size_t written) -{ - pyre16 *pyre; - pyre = heap->head; - align_size16(written); - if (taken_from_head(taken, pyre)) - { - pyre->data += written; - pyre->left -= (uint16_t)written; - ++pyre->chunks; - } - else if (taken_from_sole(taken, pyre, pyre)) - { - pyre->data += written; - pyre->chunks = 1; - } - else - { - ASSERT16(0); - } -} - -void heap32_done (heap32 *heap, void *taken, size_t written) -{ - pyre32 *pyre; - pyre = heap->head; - align_size32(written); - if (taken_from_head(taken, pyre)) - { - pyre->data += written; - pyre->left -= (uint32_t)written; - ++pyre->chunks; - } - else if (taken_from_sole(taken, pyre, pyre)) - { - pyre->data += written; - pyre->chunks = 1; - } - else - { - ASSERT32(0); - } -} - -void heap64_done (heap64 *heap, void *taken, size_t written) -{ - pyre64 *pyre; - pyre = heap->head; - align_size64(written); - if (taken_from_head(taken, pyre)) - { - pyre->data += written; - pyre->left -= (uint64_t)written; - ++pyre->chunks; - } - else if (taken_from_sole(taken, pyre, pyre)) - { - pyre->data += written; - pyre->chunks = 1; - } - else - { - ASSERT64(0); - } -} - -/* giveup */ - -void heap8_giveup (heap8 *heap, void *taken) -{ - pyre8 *head, *pyre; - head = heap->head; - if (taken_from_sole(taken, head, pyre)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } -} - -void heap16_giveup (heap16 *heap, void *taken) -{ - pyre16 *head, *pyre; - head = heap->head; - if (taken_from_sole(taken, head, pyre)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } -} - -void heap32_giveup (heap32 *heap, void *taken) -{ - pyre32 *head, *pyre; - head = heap->head; - if (taken_from_sole(taken, head, pyre)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } -} - -void heap64_giveup (heap64 *heap, void *taken) -{ - pyre64 *head, *pyre; - head = heap->head; - if (taken_from_sole(taken, head, pyre)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } -} - -/* heap empty */ - -int heap8_empty (heap8 *heap) -{ - pyre8 *pyre; - return head_block_empty(heap, pyre); -} - -int heap16_empty (heap16 *heap) -{ - pyre16 *pyre; - return head_block_empty(heap, pyre); -} - -int heap32_empty (heap32 *heap) -{ - pyre32 *pyre; - return head_block_empty(heap, pyre); -} - -int heap64_empty (heap64 *heap) -{ - pyre64 *pyre; - return head_block_empty(heap, pyre); -} - -/* heap stats */ - -void heap8_stats (heap8 *heap, mem_info *info, int append) -{ - pyre8 *pyre; - size_t used, chunks = 0, blocks = 0, singles = 0; - if (!append) - memset(info, 0, sizeof(mem_info)); - for (pyre = heap->head; pyre != NULL; pyre = pyre->prev) - { - ++blocks; - chunks += pyre->chunks; - used = block_used8(pyre); - info->used += used; - info->left += pyre->left; - if (pyre->chunks == 1 && pyre->left == 0) - { - ++singles; - info->singleused += used; - } - } - info->chunks += chunks; - info->blocks += blocks; - info->blockghosts += blocks * sizeof(pyre8); - info->singles += singles; - info->singleghosts += singles * sizeof(pyre8); -} - -void heap16_stats (heap16 *heap, mem_info *info, int append) -{ - pyre16 *pyre; - size_t used, chunks = 0, blocks = 0, singles = 0; - if (!append) - memset(info, 0, sizeof(mem_info)); - for (pyre = heap->head; pyre != NULL; pyre = pyre->prev) - { - ++blocks; - chunks += pyre->chunks; - used = block_used16(pyre); - info->used += used; - info->left += pyre->left; - if (pyre->chunks == 1 && pyre->left == 0) - { - ++singles; - info->singleused += used; - } - } - info->chunks += chunks; - info->blocks += blocks; - info->blockghosts += blocks * sizeof(pyre16); - info->singles += singles; - info->singleghosts += singles * sizeof(pyre16); -} - -void heap32_stats (heap32 *heap, mem_info *info, int append) -{ - pyre32 *pyre; - size_t used, chunks = 0, blocks = 0, singles = 0; - if (!append) - memset(info, 0, sizeof(mem_info)); - for (pyre = heap->head; pyre != NULL; pyre = pyre->prev) - { - ++blocks; - chunks += pyre->chunks; - used = block_used32(pyre); - info->used += used; - info->left += pyre->left; - if (pyre->chunks == 1 && pyre->left == 0) - { - ++singles; - info->singleused += used; - } - } - info->chunks += chunks; - info->blocks += blocks; - info->blockghosts += blocks * sizeof(pyre32); - info->singles += singles; - info->singleghosts += singles * sizeof(pyre32); -} - -void heap64_stats (heap64 *heap, mem_info *info, int append) -{ - pyre64 *pyre; - size_t used, chunks = 0, blocks = 0, singles = 0; - if (!append) - memset(info, 0, sizeof(mem_info)); - for (pyre = heap->head; pyre != NULL; pyre = pyre->prev) - { - ++blocks; - chunks += pyre->chunks; - used = block_used64(pyre); - info->used += used; - info->left += pyre->left; - if (pyre->chunks == 1 && pyre->left == 0) - { - ++singles; - info->singleused += used; - } - } - info->chunks += chunks; - info->blocks += blocks; - info->blockghosts += blocks * sizeof(pyre64); - info->singles += singles; - info->singleghosts += singles * sizeof(pyre64); -} |