2017-12-20 19:53:09 +01:00
|
|
|
/*
|
2019-08-03 19:43:48 +02: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"
|
2024-05-17 04:41:28 +02:00
|
|
|
|
2024-06-05 22:07:17 +02:00
|
|
|
void *mempool_generic_acquire(MemPool *pool, MemArena *arena, size_t size, size_t align) {
|
2024-06-05 21:16:02 +02:00
|
|
|
MemPoolObjectHeader *obj = pool->free_objects.as_generic;
|
2017-12-13 20:05:12 +01:00
|
|
|
|
2018-01-12 19:26:07 +01:00
|
|
|
if(obj) {
|
2023-04-03 03:49:39 +02:00
|
|
|
assert(pool->num_used < pool->num_allocated);
|
2024-06-05 21:16:02 +02:00
|
|
|
pool->free_objects.as_generic = obj->next;
|
2023-04-03 03:49:39 +02:00
|
|
|
} else {
|
|
|
|
assert(pool->num_used == pool->num_allocated);
|
2024-06-05 22:07:17 +02:00
|
|
|
obj = marena_alloc_aligned(arena, size, align);
|
2023-04-03 03:49:39 +02:00
|
|
|
++pool->num_allocated;
|
2018-01-12 19:26:07 +01:00
|
|
|
}
|
|
|
|
|
2023-04-03 03:49:39 +02:00
|
|
|
++pool->num_used;
|
2018-01-12 19:26:07 +01:00
|
|
|
|
2023-04-03 03:49:39 +02:00
|
|
|
assert(pool->num_used <= pool->num_allocated);
|
|
|
|
return obj;
|
2017-12-13 20:05:12 +01:00
|
|
|
}
|
|
|
|
|
2024-06-05 21:16:02 +02:00
|
|
|
void mempool_generic_release(MemPool *pool, void *object) {
|
2024-06-05 18:35:08 +02:00
|
|
|
MemPoolObjectHeader *obj = object;
|
2024-06-05 21:16:02 +02:00
|
|
|
obj->next = pool->free_objects.as_generic;
|
|
|
|
pool->free_objects.as_generic = obj;
|
2017-12-13 20:05:12 +01:00
|
|
|
|
2023-04-03 03:49:39 +02:00
|
|
|
--pool->num_used;
|
2024-06-15 09:30:01 +02:00
|
|
|
assert(pool->num_used + 1 > pool->num_used);
|
2023-04-03 03:49:39 +02:00
|
|
|
assert(pool->num_used <= pool->num_allocated);
|
2017-12-23 22:56:14 +01:00
|
|
|
}
|