aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/memory/operators.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/memory/operators.cpp')
-rw-r--r--kernel/src/memory/operators.cpp66
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