diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/PSVita/PSVitaExtras/user_new.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.Client/PSVita/PSVitaExtras/user_new.cpp')
| -rw-r--r-- | Minecraft.Client/PSVita/PSVitaExtras/user_new.cpp | 131 |
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); +} |
