taisei/src/memory/mempool.c

38 lines
1 KiB
C
Raw Permalink Normal View History

2017-12-20 19:53:09 +01:00
/*
* This software is licensed under the terms of the MIT License.
2017-12-20 19:53:09 +01:00
* See COPYING for further information.
* ---
2024-05-16 23:30:41 +02:00
* Copyright (c) 2011-2024, Lukas Weber <laochailan@web.de>.
* Copyright (c) 2012-2024, Andrei Alexeyev <akari@taisei-project.org>.
2017-12-20 19:53:09 +01:00
*/
2017-12-13 20:05:12 +01:00
2024-06-05 18:35:08 +02:00
#include "mempool.h"
void *mempool_generic_acquire(MemPool *pool, MemArena *arena, size_t size, size_t align) {
MemPoolObjectHeader *obj = pool->free_objects.as_generic;
2017-12-13 20:05:12 +01:00
if(obj) {
assert(pool->num_used < pool->num_allocated);
pool->free_objects.as_generic = obj->next;
} else {
assert(pool->num_used == pool->num_allocated);
obj = marena_alloc_aligned(arena, size, align);
++pool->num_allocated;
}
++pool->num_used;
assert(pool->num_used <= pool->num_allocated);
return obj;
2017-12-13 20:05:12 +01:00
}
void mempool_generic_release(MemPool *pool, void *object) {
2024-06-05 18:35:08 +02:00
MemPoolObjectHeader *obj = object;
obj->next = pool->free_objects.as_generic;
pool->free_objects.as_generic = obj;
2017-12-13 20:05:12 +01:00
--pool->num_used;
2024-06-15 09:30:01 +02:00
assert(pool->num_used + 1 > pool->num_used);
assert(pool->num_used <= pool->num_allocated);
}