diff options
| author | Fabrice <fabrice@schaub-dev.xyz> | 2026-03-02 22:03:20 +0100 |
|---|---|---|
| committer | Fabrice <fabrice@schaub-dev.xyz> | 2026-03-02 22:03:20 +0100 |
| commit | f291e0418202c48438407a30de9040ea4f0b4211 (patch) | |
| tree | c842df28a3247f34c2a7c9fc4f3546e60af5c624 | |
| parent | 176b2b462371cd860ac9c6b5d2c1db92ae707e88 (diff) | |
buffer stack refined
| -rw-r--r-- | src/memory.cc | 2 | ||||
| -rw-r--r-- | src/source.cc | 21 | ||||
| -rw-r--r-- | src/voidc.cc | 16 |
3 files changed, 15 insertions, 24 deletions
diff --git a/src/memory.cc b/src/memory.cc index bb0ecb1..22977d1 100644 --- a/src/memory.cc +++ b/src/memory.cc @@ -18,7 +18,7 @@ struct Allocator { template<typename T> T* allocate(const Allocator* allocator, usize n) { - return allocator->allocate(allocator->self, sizeof(T) * n, alignof(T)); + return (T*)allocator->allocate(allocator->self, sizeof(T) * n, alignof(T)); } u8* allocate(const Allocator* allocator, usize size, usize align) { diff --git a/src/source.cc b/src/source.cc index 02dd42e..e1a0710 100644 --- a/src/source.cc +++ b/src/source.cc @@ -67,29 +67,19 @@ void buffer_deinit(Buffer* buffer) { deallocate(buffer->allocator, (u8*)buffer); } -struct Buffer_Manager { +struct Buffer_Stack { Link* stack; - Array<Buffer*> buffers; }; -#define buffer_manager_init(allocator) \ - Buffer_Manager { nullptr, array_init(Buffer*, allocator) } - -bool buffer_manager_push(Buffer_Manager* manager, Buffer* b) { +void buffer_stack_push(Buffer_Stack* manager, Buffer* b) { assert_neq(manager, nullptr); assert_neq(b, nullptr); - bool ret = array_push(&manager->buffers, b); - if (!ret) return false; - - b = *array_last(&manager->buffers); if (manager->stack != nullptr) link_after(manager->stack, &b->link); - manager->stack = &b->link; - return true; } -bool buffer_manager_pop(Buffer_Manager* manager, Buffer** b) { +bool buffer_stack_pop(Buffer_Stack* manager, Buffer** b) { assert_neq(manager, nullptr); assert_neq(b, nullptr); @@ -106,9 +96,4 @@ bool buffer_manager_pop(Buffer_Manager* manager, Buffer** b) { return true; } -void buffer_manager_deinit(Buffer_Manager* manager) { - assert_neq(manager, nullptr); - array_deinit(&manager->buffers); -} - #endif diff --git a/src/voidc.cc b/src/voidc.cc index 8cf9a63..fbb9577 100644 --- a/src/voidc.cc +++ b/src/voidc.cc @@ -20,13 +20,19 @@ int main() { String source(SOURCE); String file(SOURCE_FILE); - Buffer_Manager manager = buffer_manager_init(heap_allocator()); + Buffer_Stack stack{}; + Buffer* buffer = nullptr; - Buffer buffer{}; - bool ret = buffer_init(&buffer, heap_allocator(), &source, &file); + bool ret = buffer_init(heap_allocator(), &source, &file, &buffer); if (!ret) return EXIT_FAILURE; - buffer_manager_push(&manager, &buffer); + buffer_stack_push(&stack, buffer); + buffer_stack_push(&stack, buffer); - buffer_manager_deinit(&manager); + int c = 0; + while(buffer_stack_pop(&stack, &buffer)) { + c += 1; + } + + assert(c == 2); } |
