cutil/heap.h

37 lines
No EOL
925 B
C

#ifndef __CUTIL_HEAP_H
#define __CUTIL_HEAP_H
#include "cutypes.h"
typedef struct mblock_s {
struct mblock_s* prev;
struct mblock_s* next;
uword size;
u8 data[1];
} mblock_t;
typedef struct {
u8* data;
uword size;
} mheap_t;
#ifdef CU_64BIT
# define MBLOCK_ALIGN 5
#else
# define MBLOCK_ALIGN 4
#endif
#define MBLOCK_SIZE (CU_WORD_SIZE*3)
#define MBLOCK_SIZE_MASK ((CU_WORD_BITS/8) - 1)
#define MBLOCK_ALIGN_SIZE(size) (cu_round2_up((size), MBLOCK_ALIGN))
#define MBLOCK_ATTR_ALLOC (1<<0)
#define IS_MBLOCK_ALLOC(mblock) (mblock->size & MBLOCK_ATTR_ALLOC)
void heap_init(mheap_t* heap, void* data, uword size);
void heap_join(mblock_t* start, int dir);
void heap_split(mblock_t* block, size_t req_size);
void* heap_alloc(mheap_t* heap, size_t size);
void* heap_realloc(mheap_t* heap, void* mem, size_t size);
void heap_free(mheap_t* heap, void* mem);
#endif