From d241eaf1b209dcfb05656842dd6250067b704d99 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Tue, 19 Nov 2024 00:08:33 +0100 Subject: Add allocator, start work on box --- asl/allocator.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 asl/allocator.cpp (limited to 'asl/allocator.cpp') diff --git a/asl/allocator.cpp b/asl/allocator.cpp new file mode 100644 index 0000000..9559637 --- /dev/null +++ b/asl/allocator.cpp @@ -0,0 +1,38 @@ +#include "asl/allocator.hpp" +#include "asl/assert.hpp" +#include "asl/utility.hpp" +#include "asl/memory.hpp" + +#include + +// @Todo zalloc +// @Todo Cookies +// @Todo Debug values + +void* asl::GlobalHeap::alloc(const layout& layout) +{ + void* ptr = ::_aligned_malloc( + static_cast(layout.size), + static_cast(layout.align)); + ASL_ASSERT(ptr != nullptr); // @Todo panic + return ptr; +} + +void* asl::GlobalHeap::realloc(void* old_ptr, const layout& old_layout, const layout& new_layout) +{ + if (new_layout.align <= old_layout.align) + { + void* new_ptr = ::realloc(old_ptr, static_cast(new_layout.size)); + ASL_ASSERT(new_ptr != nullptr); // @Todo panic + return new_ptr; + } + + void* new_ptr = alloc(new_layout); + asl::memcpy(new_ptr, old_ptr, asl::min(old_layout.size, new_layout.size)); + return new_ptr; +} + +void asl::GlobalHeap::dealloc(void* ptr, const layout&) +{ + ::free(ptr); +} -- cgit