#include "kapi/system.hpp" #include "kernel/memory.hpp" #include #include [[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); }