aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/PSVita/PSVitaExtras/user_new.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/PSVita/PSVitaExtras/user_new.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/PSVita/PSVitaExtras/user_new.cpp')
-rw-r--r--Minecraft.Client/PSVita/PSVitaExtras/user_new.cpp131
1 files changed, 131 insertions, 0 deletions
diff --git a/Minecraft.Client/PSVita/PSVitaExtras/user_new.cpp b/Minecraft.Client/PSVita/PSVitaExtras/user_new.cpp
new file mode 100644
index 00000000..1f71f6d2
--- /dev/null
+++ b/Minecraft.Client/PSVita/PSVitaExtras/user_new.cpp
@@ -0,0 +1,131 @@
+/* SCE CONFIDENTIAL
+ PlayStation(R)Vita Programmer Tool Runtime Library Release 03.000.061
+ * Copyright (C) 2012 Sony Computer Entertainment Inc.
+ * All Rights Reserved.
+ */
+
+#include <new>
+#include <cstdlib>
+//#include <libdbg.h>
+
+void *user_new(std::size_t size) throw(std::bad_alloc);
+void *user_new(std::size_t size, const std::nothrow_t& x) throw();
+void *user_new_array(std::size_t size) throw(std::bad_alloc);
+void *user_new_array(std::size_t size, const std::nothrow_t& x) throw();
+void user_delete(void *ptr) throw();
+void user_delete(void *ptr, const std::nothrow_t& x) throw();
+void user_delete_array(void *ptr) throw();
+void user_delete_array(void *ptr, const std::nothrow_t& x) throw();
+
+/**E Replace operator new. */
+/**J operator new と置き換わる */
+void *user_new(std::size_t size) throw(std::bad_alloc)
+{
+ void *ptr;
+
+// SCE_DBG_LOG_TRACE("Called operator new(%u)", size);
+
+ if (size == 0)
+ size = 1;
+
+ while ((ptr = (void *)std::malloc(size)) == NULL) {
+ /**E Obtain new_handler */
+ /**J new_handler を取得する */
+ std::new_handler handler = std::_get_new_handler();
+
+ /**E When new_handler is a NULL pointer, bad_alloc is send. If not, new_handler is called. */
+ /**J new_handler が NULL ポインタの場合、bad_alloc を送出する、そうでない場合、new_handler を呼び出す */
+ if (!handler)
+ throw std::bad_alloc();
+ else
+ (*handler)();
+ }
+ return ptr;
+}
+
+/**E Replace operator new(std::nothrow). */
+/**J operator(std::nothrow) と置き換わる */
+void *user_new(std::size_t size, const std::nothrow_t& x) throw()
+{
+ void *ptr;
+
+ (void)x;
+
+// SCE_DBG_LOG_TRACE("Called operator new(nothrow)(%u)", size);
+
+ if (size == 0)
+ size = 1;
+
+ while ((ptr = (void *)std::malloc(size)) == NULL) {
+ /**E Obtain new_handler */
+ /**J new_handler を取得する */
+ std::new_handler handler = std::_get_new_handler();
+
+ /**E When new_handler is a NULL pointer, NULL is returned. */
+ /**J new_handler が NULL ポインタの場合、NULL を返す */
+ if (!handler)
+ return NULL;
+
+ /**E Call new_handler. If new_handler sends bad_alloc, NULL is returned. */
+ /**J new_handler を呼び出す、new_handler が bad_alloc を送出した場合、NULL を返す */
+ try {
+ (*handler)();
+ } catch (std::bad_alloc) {
+ return NULL;
+ }
+ }
+ return ptr;
+}
+
+/**E Replace operator new[]. */
+/**J operator new[] と置き換わる */
+void *user_new_array(std::size_t size) throw(std::bad_alloc)
+{
+// SCE_DBG_LOG_TRACE("Called operator new[](%u)", size);
+ return user_new(size);
+}
+
+/**E Replace operator new[](std::nothrow). */
+/**J operator new[](std::nothrow) と置き換わる */
+void *user_new_array(std::size_t size, const std::nothrow_t& x) throw()
+{
+// SCE_DBG_LOG_TRACE("Called operator new(nothrow)[](%u)", size);
+ return user_new(size, x);
+}
+
+/**E Replace operator delete. */
+/**J operator delete と置き換わる */
+void user_delete(void *ptr) throw()
+{
+// SCE_DBG_LOG_TRACE("Called operator delete(%p)", ptr);
+ /**E In the case of the NULL pointer, no action will be taken. */
+ /**J NULL ポインタの場合、何も行わない */
+ if (ptr != NULL)
+ std::free(ptr);
+}
+
+/**E Replace operator delete(std::nothrow). */
+/**J operator delete(std::nothrow) と置き換わる */
+void user_delete(void *ptr, const std::nothrow_t& x) throw()
+{
+ (void)x;
+
+// SCE_DBG_LOG_TRACE("Called operator delete(nothrow)(%p)", ptr);
+ user_delete(ptr);
+}
+
+/**E Replace operator delete[]. */
+/**J operator delete[] と置き換わる */
+void user_delete_array(void *ptr) throw()
+{
+// SCE_DBG_LOG_TRACE("Called operator delete[](%p)", ptr);
+ user_delete(ptr);
+}
+
+/**E Replace operator delete[](std::nothrow). */
+/**J operator delete[](std::nothrow) と置き換わる */
+void user_delete_array(void *ptr, const std::nothrow_t& x) throw()
+{
+// SCE_DBG_LOG_TRACE("Called operator delete(nothrow)[](%p)", ptr);
+ user_delete(ptr, x);
+}