aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/zencore/include')
-rw-r--r--src/zencore/include/zencore/zen-new-delete.h71
-rw-r--r--src/zencore/include/zencore/zencore.h7
2 files changed, 78 insertions, 0 deletions
diff --git a/src/zencore/include/zencore/zen-new-delete.h b/src/zencore/include/zencore/zen-new-delete.h
new file mode 100644
index 000000000..27c53b4e2
--- /dev/null
+++ b/src/zencore/include/zencore/zen-new-delete.h
@@ -0,0 +1,71 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#pragma once
+
+#include <zencore/zencore.h>
+
+#if ZEN_USE_MIMALLOC
+
+# define zen_new_aligned mi_aligned_alloc
+# define zen_free mi_free
+
+#else
+
+# include <new>
+
+# if defined(_MSC_VER) && defined(_Ret_notnull_) && defined(_Post_writable_byte_size_)
+// stay consistent with VCRT definitions
+# define mi_decl_new(n) [[nodiscard]] _Ret_notnull_ _Post_writable_byte_size_(n)
+# define mi_decl_new_nothrow(n) [[nodiscard]] _Ret_maybenull_ _Success_(return != NULL) _Post_writable_byte_size_(n)
+# else
+# define mi_decl_new(n) [[nodiscard]]
+# define mi_decl_new_nothrow(n) [[nodiscard]]
+# endif
+
+void
+operator delete(void* p) noexcept
+{
+ zen_free(p);
+};
+void
+operator delete[](void* p) noexcept
+{
+ zen_free(p);
+};
+
+void
+operator delete(void* p, const std::nothrow_t&) noexcept
+{
+ zen_free(p);
+}
+void
+operator delete[](void* p, const std::nothrow_t&) noexcept
+{
+ zen_free(p);
+}
+
+mi_decl_new(n) void*
+operator new(std::size_t n) noexcept(false)
+{
+ return zen_new(n);
+}
+mi_decl_new(n) void*
+operator new[](std::size_t n) noexcept(false)
+{
+ return zen_new(n);
+}
+
+mi_decl_new_nothrow(n) void*
+operator new(std::size_t n, const std::nothrow_t& tag) noexcept
+{
+ (void)(tag);
+ return zen_new(n);
+}
+mi_decl_new_nothrow(n) void*
+operator new[](std::size_t n, const std::nothrow_t& tag) noexcept
+{
+ (void)(tag);
+ return zen_new(n);
+}
+
+#endif
diff --git a/src/zencore/include/zencore/zencore.h b/src/zencore/include/zencore/zencore.h
index d21c0e7e2..600406acb 100644
--- a/src/zencore/include/zencore/zencore.h
+++ b/src/zencore/include/zencore/zencore.h
@@ -23,6 +23,13 @@
# define ZEN_DEBUG_SECTION ZEN_CODE_SECTION(".zcold")
#endif
+void zen_free(void* p) noexcept;
+void zen_free_size(void* p, std::size_t n) noexcept;
+void* zen_new(std::size_t n) noexcept;
+void* zen_new_aligned(std::size_t n, size_t al) noexcept;
+void zen_free_aligned(void* p, size_t al) noexcept;
+void zen_free_size_aligned(void* p, std::size_t n, size_t al) noexcept;
+
namespace zen {
struct CallstackFrames;