summaryrefslogtreecommitdiff
path: root/src/source.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/source.cc')
-rw-r--r--src/source.cc30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/source.cc b/src/source.cc
index c13fefc..69f1941 100644
--- a/src/source.cc
+++ b/src/source.cc
@@ -23,6 +23,11 @@ struct Buffer {
bool buffer_init(Buffer* buffer, const Allocator* allocator,
const String* content_in, const String* file_in) {
+ assert_neq(buffer, nullptr);
+ assert_neq(allocator, nullptr);
+ assert_neq(content_in, nullptr);
+ assert_neq(file_in, nullptr);
+
String content, file;
bool ret = slice_copy(allocator, content_in, &content);
if (unlikely(!ret)) return false;
@@ -41,6 +46,8 @@ bool buffer_init(Buffer* buffer, const Allocator* allocator,
}
void buffer_deinit(Buffer* buffer) {
+ assert_neq(buffer, nullptr);
+
slice_deallocate(buffer->allocator, &buffer->file);
slice_deallocate(buffer->allocator, &buffer->content);
@@ -55,9 +62,26 @@ struct Buffer_Manager {
#define buffer_manager_init(allocator) \
Buffer_Manager { nullptr, array_init(Buffer, allocator) }
-void buffer_manager_deinit(Buffer_Manager* stack) {
- assert(stack != nullptr);
- array_deinit(&stack->buffers);
+bool buffer_manager_push(Buffer_Manager* 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) {
+ manager->stack = &b->link;
+ return true;
+ }
+
+ link_after(manager->stack, &b->link);
+ return true;
+}
+
+void buffer_manager_deinit(Buffer_Manager* manager) {
+ assert_neq(manager, nullptr);
+ array_deinit(&manager->buffers);
}
#endif