#ifndef __TLSF_H__
#define __TLSF_H__

#include <stddef.h>

typedef void* tlsf_pool;

// Create/destroy a memory pool.
tlsf_pool tlsf_create(void* mem, size_t bytes);
void tlsf_destroy(tlsf_pool pool);

// malloc/memalign/realloc/free replacements.
void* tlsf_malloc(tlsf_pool pool, size_t bytes);
void* tlsf_memalign(tlsf_pool pool, size_t align, size_t bytes);
void* tlsf_realloc(tlsf_pool pool, void* ptr, size_t size);
void* tlsf_realloc_aligned(tlsf_pool pool, void* ptr, size_t align, size_t size);
void  tlsf_free(tlsf_pool pool, void* ptr);

// Debugging.
typedef void (*tlsf_walker)(void* ptr, size_t size, int used, void* user);
void tlsf_walk_heap(tlsf_pool pool, tlsf_walker walker, void* user);

// Returns nonzero if heap check fails.
int tlsf_check_heap(tlsf_pool pool);

// Returns internal block size, not original request size */
size_t tlsf_block_size(void* ptr);

// Overhead of per-pool internal structures.
size_t tlsf_overhead();

#endif
