Files
PixelDefense/engine/libs/flecs/include/flecs/private/allocator.h

74 lines
2.1 KiB
C

/**
* @file allocator.h
* @brief Allocator that returns memory objects of any size.
*/
#ifndef FLECS_ALLOCATOR_H
#define FLECS_ALLOCATOR_H
#include "api_defines.h"
FLECS_DBG_API extern int64_t ecs_block_allocator_alloc_count;
FLECS_DBG_API extern int64_t ecs_block_allocator_free_count;
FLECS_DBG_API extern int64_t ecs_stack_allocator_alloc_count;
FLECS_DBG_API extern int64_t ecs_stack_allocator_free_count;
struct ecs_allocator_t {
ecs_block_allocator_t chunks;
struct ecs_sparse_t sizes; /* <size, block_allocator_t> */
};
FLECS_API
void flecs_allocator_init(
ecs_allocator_t *a);
FLECS_API
void flecs_allocator_fini(
ecs_allocator_t *a);
FLECS_API
ecs_block_allocator_t* flecs_allocator_get(
ecs_allocator_t *a,
ecs_size_t size);
FLECS_API
char* flecs_strdup(
ecs_allocator_t *a,
const char* str);
FLECS_API
void flecs_strfree(
ecs_allocator_t *a,
char* str);
FLECS_API
void* flecs_dup(
ecs_allocator_t *a,
ecs_size_t size,
const void *src);
#define flecs_allocator(obj) (&obj->allocators.dyn)
#define flecs_alloc(a, size) flecs_balloc(flecs_allocator_get(a, size))
#define flecs_alloc_t(a, T) flecs_alloc(a, ECS_SIZEOF(T))
#define flecs_alloc_n(a, T, count) flecs_alloc(a, ECS_SIZEOF(T) * (count))
#define flecs_calloc(a, size) flecs_bcalloc(flecs_allocator_get(a, size))
#define flecs_calloc_t(a, T) flecs_calloc(a, ECS_SIZEOF(T))
#define flecs_calloc_n(a, T, count) flecs_calloc(a, ECS_SIZEOF(T) * (count))
#define flecs_free(a, size, ptr) flecs_bfree(flecs_allocator_get(a, size), ptr)
#define flecs_free_t(a, T, ptr) flecs_free(a, ECS_SIZEOF(T), ptr)
#define flecs_free_n(a, T, count, ptr) flecs_free(a, ECS_SIZEOF(T) * (count), ptr)
#define flecs_realloc(a, size_dst, size_src, ptr)\
flecs_brealloc(flecs_allocator_get(a, size_dst),\
flecs_allocator_get(a, size_src),\
ptr)
#define flecs_realloc_n(a, T, count_dst, count_src, ptr)\
flecs_realloc(a, ECS_SIZEOF(T) * (count_dst), ECS_SIZEOF(T) * (count_src), ptr)
#define flecs_dup_n(a, T, count, ptr) flecs_dup(a, ECS_SIZEOF(T) * (count), ptr)
#endif