diff options
Diffstat (limited to 'kernel/src/memory/operators.cpp')
| -rw-r--r-- | kernel/src/memory/operators.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/kernel/src/memory/operators.cpp b/kernel/src/memory/operators.cpp new file mode 100644 index 0000000..1422133 --- /dev/null +++ b/kernel/src/memory/operators.cpp @@ -0,0 +1,66 @@ +#include "kapi/system.hpp" + +#include "kernel/memory.hpp" + +#include <cstddef> +#include <new> + +[[nodiscard]] auto operator new(std::size_t size) -> void * +{ + auto & allocator = kernel::memory::get_heap_allocator(); + auto pointer = allocator.allocate(size, std::align_val_t{__STDCPP_DEFAULT_NEW_ALIGNMENT__}); + + if (pointer == nullptr) + { + kapi::system::panic("[OS:Heap] Out of memory!"); + } + + return pointer; +} + +[[nodiscard]] auto operator new[](std::size_t size) -> void * +{ + return ::operator new(size); +} + +[[nodiscard]] auto operator new(std::size_t size, std::align_val_t alignment) -> void * +{ + auto & allocator = kernel::memory::get_heap_allocator(); + auto pointer = allocator.allocate(size, alignment); + + if (pointer == nullptr) + { + kapi::system::panic("[OS:Heap] Out of memory!"); + } + + return pointer; +} + +auto operator delete(void * pointer) noexcept -> void +{ + if (pointer != nullptr) + { + auto & allocator = kernel::memory::get_heap_allocator(); + allocator.deallocate(pointer); + } +} + +auto operator delete(void * pointer, [[maybe_unused]] std::size_t size) noexcept -> void +{ + ::operator delete(pointer); +} + +auto operator delete[](void * pointer) noexcept -> void +{ + ::operator delete(pointer); +} + +auto operator delete[](void * pointer, [[maybe_unused]] std::size_t size) noexcept -> void +{ + ::operator delete(pointer); +} + +auto operator delete(void * pointer, [[maybe_unused]] std::align_val_t alignment) noexcept -> void +{ + ::operator delete(pointer); +}
\ No newline at end of file |
