Implement reallocation functionality for Arena allocator
This commit is contained in:
		| @@ -96,13 +96,39 @@ 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 *wapp_mem_arena_realloc_aligned(Arena *arena, void *ptr, u64 old_size, u64 new_size, u64 alignment) { |   void *new_ptr = wapp_mem_arena_alloc(arena, new_size); | ||||||
|  |   if (!new_ptr) { | ||||||
|     return NULL; |     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) { | ||||||
|  |   if ((u8*)ptr < arena->buf || (u8*)ptr > arena->offset || | ||||||
|  |       arena->offset + new_size >= arena->buf + arena->capacity) { | ||||||
|  |     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) { | ||||||
|   if (!arena) { |   if (!arena) { | ||||||
|     return; |     return; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user