Remove alloc_obj and pass double pointer to free function
This commit is contained in:
		| @@ -12,11 +12,11 @@ typedef void *(MemAllocAlignedFunc)(u64 size, u64 alignment, void *alloc_obj); | ||||
| typedef void *(MemReallocFunc)(void *ptr, u64 size, void *alloc_obj); | ||||
| typedef void *(MemReallocAlignedFunc)(void *ptr, u64 size, u64 alignment, | ||||
|                                       void *alloc_obj); | ||||
| typedef void(MemFreeFunc)(void *ptr, void *alloc_obj); | ||||
| typedef void(MemFreeFunc)(void **ptr, void *alloc_obj); | ||||
|  | ||||
| typedef struct allocator Allocator; | ||||
| struct allocator { | ||||
| 	void *obj; | ||||
|   void *obj; | ||||
|   MemAllocFunc *alloc; | ||||
|   MemAllocAlignedFunc *alloc_aligned; | ||||
|   MemReallocFunc *realloc; | ||||
| @@ -24,6 +24,15 @@ struct allocator { | ||||
|   MemFreeFunc *free; | ||||
| }; | ||||
|  | ||||
| void *wapp_mem_allocator_alloc(const Allocator *allocator, u64 size); | ||||
| void *wapp_mem_allocator_alloc_aligned(const Allocator *allocator, u64 size, | ||||
|                                        u64 alignment); | ||||
| void *wapp_mem_allocator_realloc(const Allocator *allocator, void *ptr, | ||||
|                                  u64 size); | ||||
| void *wapp_mem_allocator_realloc_aligned(const Allocator *allocator, void *ptr, | ||||
|                                          u64 size, u64 alignment); | ||||
| void wapp_mem_allocator_free(const Allocator *allocator, void **ptr); | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif // __cplusplus | ||||
|   | ||||
| @@ -51,7 +51,8 @@ internal void base_arena_free(BaseArena *arena); | ||||
| internal ArenaAllocHDR *find_alloc_header(BaseArena *arena, void *alloc_ptr); | ||||
|  | ||||
| internal void *mem_arena_alloc(u64 size, void *alloc_obj); | ||||
| internal void *mem_arena_alloc_aligned(u64 size, u64 alignment, void *alloc_obj); | ||||
| internal void *mem_arena_alloc_aligned(u64 size, u64 alignment, | ||||
|                                        void *alloc_obj); | ||||
| internal void *mem_arena_realloc(void *ptr, u64 size, void *alloc_obj); | ||||
| internal void *mem_arena_realloc_aligned(void *ptr, u64 size, u64 alignment, | ||||
|                                          void *alloc_obj); | ||||
| @@ -374,26 +375,27 @@ internal ArenaAllocHDR *find_alloc_header(BaseArena *arena, void *alloc_ptr) { | ||||
| } | ||||
|  | ||||
| internal void *mem_arena_alloc(u64 size, void *alloc_obj) { | ||||
| 	Arena *arena = (Arena *)alloc_obj; | ||||
|   Arena *arena = (Arena *)alloc_obj; | ||||
|  | ||||
| 	return wapp_mem_arena_alloc(arena, size); | ||||
|   return wapp_mem_arena_alloc(arena, size); | ||||
| } | ||||
|  | ||||
| internal void *mem_arena_alloc_aligned(u64 size, u64 alignment, void *alloc_obj) { | ||||
| 	Arena *arena = (Arena *)alloc_obj; | ||||
| internal void *mem_arena_alloc_aligned(u64 size, u64 alignment, | ||||
|                                        void *alloc_obj) { | ||||
|   Arena *arena = (Arena *)alloc_obj; | ||||
|  | ||||
| 	return wapp_mem_arena_alloc_aligned(arena, size, alignment); | ||||
|   return wapp_mem_arena_alloc_aligned(arena, size, alignment); | ||||
| } | ||||
|  | ||||
| internal void *mem_arena_realloc(void *ptr, u64 size, void *alloc_obj) { | ||||
| 	Arena *arena = (Arena *)alloc_obj; | ||||
|   Arena *arena = (Arena *)alloc_obj; | ||||
|  | ||||
| 	return wapp_mem_arena_realloc(arena, ptr, size); | ||||
|   return wapp_mem_arena_realloc(arena, ptr, size); | ||||
| } | ||||
|  | ||||
| internal void *mem_arena_realloc_aligned(void *ptr, u64 size, u64 alignment, | ||||
| 																				 void *alloc_obj) { | ||||
| 	Arena *arena = (Arena *)alloc_obj; | ||||
|                                          void *alloc_obj) { | ||||
|   Arena *arena = (Arena *)alloc_obj; | ||||
|  | ||||
| 	return wapp_mem_arena_realloc_aligned(arena, ptr, size, alignment); | ||||
|   return wapp_mem_arena_realloc_aligned(arena, ptr, size, alignment); | ||||
| } | ||||
|   | ||||
| @@ -18,7 +18,7 @@ internal Arena *get_arena(CTXDestBuffer buffer); | ||||
|  | ||||
| Allocator wapp_mem_ctx_allocator(CTXDestBuffer buffer) { | ||||
|   Arena *arena = get_arena(buffer); | ||||
| 	return wapp_mem_arena_allocator(arena); | ||||
|   return wapp_mem_arena_allocator(arena); | ||||
| } | ||||
|  | ||||
| void wapp_mem_ctx_init(u64 main_buf_capacity, u64 temp_buf_capacity) { | ||||
| @@ -53,17 +53,17 @@ void *wapp_mem_ctx_realloc(CTXDestBuffer buffer, void *ptr, u64 size) { | ||||
|     return NULL; | ||||
|   } | ||||
|  | ||||
| 	return wapp_mem_arena_realloc(arena, ptr, size); | ||||
|   return wapp_mem_arena_realloc(arena, ptr, size); | ||||
| } | ||||
|  | ||||
| void *wapp_mem_ctx_realloc_aligned(CTXDestBuffer buffer, void *ptr, u64 size, | ||||
| 																	 u64 alignment) { | ||||
|                                    u64 alignment) { | ||||
|   Arena *arena = get_arena(buffer); | ||||
|   if (!arena) { | ||||
|     return NULL; | ||||
|   } | ||||
|  | ||||
| 	return wapp_mem_arena_realloc_aligned(arena, ptr, size, alignment); | ||||
|   return wapp_mem_arena_realloc_aligned(arena, ptr, size, alignment); | ||||
| } | ||||
|  | ||||
| void wapp_mem_ctx_clear(CTXDestBuffer buffer) { | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
| internal void *mem_libc_alloc(u64 size, void *alloc_obj); | ||||
| internal void *mem_libc_alloc_aligned(u64 size, u64 alignment, void *alloc_obj); | ||||
| internal void *mem_libc_realloc(void *ptr, u64 size, void *alloc_obj); | ||||
| internal void mem_libc_free(void *ptr, void *alloc_obj); | ||||
| internal void mem_libc_free(void **ptr, void *alloc_obj); | ||||
|  | ||||
| Allocator wapp_mem_libc_allocator(void) { | ||||
|   return (Allocator){ | ||||
| @@ -26,10 +26,10 @@ internal void *mem_libc_alloc(u64 size, void *alloc_obj) { | ||||
|  | ||||
| internal void *mem_libc_alloc_aligned(u64 size, u64 alignment, | ||||
|                                       void *alloc_obj) { | ||||
| 	void *output = aligned_alloc(alignment, size); | ||||
| 	if (output) { | ||||
| 		memset(output, 0, size); | ||||
| 	} | ||||
|   void *output = aligned_alloc(alignment, size); | ||||
|   if (output) { | ||||
|     memset(output, 0, size); | ||||
|   } | ||||
|  | ||||
|   return output; | ||||
| } | ||||
| @@ -43,4 +43,11 @@ internal void *mem_libc_realloc(void *ptr, u64 size, void *alloc_obj) { | ||||
|   return output; | ||||
| } | ||||
|  | ||||
| internal void mem_libc_free(void *ptr, void *alloc_obj) { free(ptr); } | ||||
| internal void mem_libc_free(void **ptr, void *alloc_obj) { | ||||
|   if (!ptr || !(*ptr)) { | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   free(*ptr); | ||||
|   *ptr = NULL; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user