complete arena allocator implementation of allocator interface
This commit is contained in:
+22
-7
@@ -69,14 +69,29 @@ static void *arena_resize(arena_allocator_t *this, void *old_ptr, size_t bytes)
|
|||||||
return new_ptr_b;
|
return new_ptr_b;
|
||||||
}
|
}
|
||||||
|
|
||||||
// typedef struct arena_allocator {
|
static void *arena_alloc_impl(void *this, size_t bytes) {
|
||||||
// allocator_t allocator;
|
return arena_alloc((arena_allocator_t*)this, bytes);
|
||||||
// size_t size;
|
}
|
||||||
// size_t capacity;
|
|
||||||
// size_t bytes_outside_data;
|
|
||||||
// uint8_t *data;
|
|
||||||
// } arena_allocator_t;
|
|
||||||
|
|
||||||
|
static void *arena_resize_impl(void *this, void *old_ptr, size_t bytes) {
|
||||||
|
return arena_resize((arena_allocator_t*)this, old_ptr, bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void arena_reset_impl(void *this) {
|
||||||
|
arena_reset((arena_allocator_t*)this);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const allocator_vtbl_t arena_vtbl = {
|
||||||
|
.alloc = arena_alloc_impl,
|
||||||
|
.resize = arena_resize_impl,
|
||||||
|
.reset = arena_reset_impl,
|
||||||
|
};
|
||||||
|
|
||||||
allocator_t allocator_from_arena(arena_allocator_t *this) {
|
allocator_t allocator_from_arena(arena_allocator_t *this) {
|
||||||
|
return (allocator_t) {
|
||||||
|
.this=this,
|
||||||
|
.vtbl=&arena_vtbl,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user