Mirai's Miscellaneous Misadventures

M35 / include / mimimi / allocators.h

// copyright 2022 zamfofex
// license: AGPLv3 or later

#ifndef MIMIMI_ALLOCATORS_H
#define MIMIMI_ALLOCATORS_H

struct mimimi_allocator
{
	void *(*allocate)(void *data, unsigned int size);
	void *(*reallocate)(void *data, void *value, unsigned int size);
	void (*deallocate)(void *data, void *value);
	void *data;
	void *null;
};

static inline void *mimimi_allocate(struct mimimi_allocator *allocator, unsigned int size)
{
	return (*allocator->allocate)(allocator->data, size);
}

static inline void *mimimi_reallocate(struct mimimi_allocator *allocator, void *value, unsigned int size)
{
	return (*allocator->reallocate)(allocator->data, value, size);
}

static inline void mimimi_deallocate(struct mimimi_allocator *allocator, void *value)
{
	(*allocator->deallocate)(allocator->data, value);
}

struct mimimi_allocator *mimimi_temporary_allocator(struct mimimi_allocator *allocator);
void mimimi_finish_temporary_allocator(struct mimimi_allocator *allocator);

#endif