#include "kapi/system.hpp" #include "kernel/memory.hpp" #include #include #include [[nodiscard]] auto operator new(std::size_t size, std::align_val_t alignment, std::nothrow_t const &) noexcept -> void * { auto & allocator = kernel::memory::get_heap_allocator(); return allocator.allocate(static_cast(size), static_cast(static_cast(alignment))); } [[nodiscard]] auto operator new(std::size_t size, std::align_val_t alignment) -> void * { auto pointer = operator new(size, alignment, std::nothrow); if (pointer == nullptr) { kapi::system::panic("[OS:Heap] Out of memory!"); } return pointer; } [[nodiscard]] auto operator new(std::size_t size, std::nothrow_t const &) noexcept -> void * { return operator new(size, std::align_val_t{__STDCPP_DEFAULT_NEW_ALIGNMENT__}, std::nothrow); } [[nodiscard]] auto operator new(std::size_t size) -> void * { return operator new(size, std::align_val_t{__STDCPP_DEFAULT_NEW_ALIGNMENT__}); } [[nodiscard]] auto operator new[](std::size_t size, std::align_val_t alignment, std::nothrow_t const &) noexcept -> void * { return operator new(size, alignment, std::nothrow); } [[nodiscard]] auto operator new[](std::size_t size, std::align_val_t alignment) -> void * { return operator new(size, alignment); } [[nodiscard]] auto operator new[](std::size_t size, std::nothrow_t const &) noexcept -> void * { return ::operator new(size); } [[nodiscard]] auto operator new[](std::size_t size) -> void * { return ::operator new(size); } 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, std::size_t) noexcept -> void { ::operator delete(pointer); } auto operator delete(void * pointer, std::align_val_t) noexcept -> void { ::operator delete(pointer); } auto operator delete(void * pointer, std::size_t size, std::align_val_t) noexcept -> void { ::operator delete(pointer, size); } auto operator delete[](void * pointer) noexcept -> void { ::operator delete(pointer); } auto operator delete[](void * pointer, std::size_t size) noexcept -> void { ::operator delete(pointer, size); } auto operator delete[](void * pointer, std::align_val_t) noexcept -> void { ::operator delete(pointer); } auto operator delete[](void * pointer, std::size_t size, std::align_val_t) noexcept -> void { ::operator delete(pointer, size); }