Implement reallocation functionality for Arena allocator
This commit is contained in:
parent
16a1b8fa35
commit
7fea236618
@ -96,11 +96,37 @@ void *wapp_mem_arena_alloc_aligned(Arena *arena, u64 size, u64 alignment) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void *wapp_mem_arena_realloc(Arena *arena, void *ptr, u64 old_size, u64 new_size) {
|
void *wapp_mem_arena_realloc(Arena *arena, void *ptr, u64 old_size, u64 new_size) {
|
||||||
|
if ((u8*)ptr < arena->buf || (u8*)ptr > arena->offset ||
|
||||||
|
arena->offset + new_size >= arena->buf + arena->capacity) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *new_ptr = wapp_mem_arena_alloc(arena, new_size);
|
||||||
|
if (!new_ptr) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 copy_size = new_size <= old_size ? new_size : old_size;
|
||||||
|
memcpy(new_ptr, ptr, copy_size);
|
||||||
|
|
||||||
|
return new_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *wapp_mem_arena_realloc_aligned(Arena *arena, void *ptr, u64 old_size, u64 new_size, u64 alignment) {
|
void *wapp_mem_arena_realloc_aligned(Arena *arena, void *ptr, u64 old_size, u64 new_size, u64 alignment) {
|
||||||
|
if ((u8*)ptr < arena->buf || (u8*)ptr > arena->offset ||
|
||||||
|
arena->offset + new_size >= arena->buf + arena->capacity) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *new_ptr = wapp_mem_arena_alloc_aligned(arena, new_size, alignment);
|
||||||
|
if (!new_ptr) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 copy_size = new_size <= old_size ? new_size : old_size;
|
||||||
|
memcpy(new_ptr, ptr, copy_size);
|
||||||
|
|
||||||
|
return new_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wapp_mem_arena_clear(Arena *arena) {
|
void wapp_mem_arena_clear(Arena *arena) {
|
||||||
|
Loading…
Reference in New Issue
Block a user