diff options
Diffstat (limited to 'Minecraft.Client/Orbis/user_new.cpp')
| -rw-r--r-- | Minecraft.Client/Orbis/user_new.cpp | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/Minecraft.Client/Orbis/user_new.cpp b/Minecraft.Client/Orbis/user_new.cpp new file mode 100644 index 00000000..83aa3f8c --- /dev/null +++ b/Minecraft.Client/Orbis/user_new.cpp @@ -0,0 +1,125 @@ +/* SCE CONFIDENTIAL + PlayStation(R)4 Programmer Tool Runtime Library Release 01.600.051 + * Copyright (C) 2013 Sony Computer Entertainment Inc. + * All Rights Reserved. + */ + +#include <new> +#include <cstdlib> +#include <cstdio> + +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; + + 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) + { + assert(0);//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; +// +// 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; + assert(0); + return NULL; +} + +//E Replace operator new[]. +//J operator new[] と置き換わる +void *user_new_array(std::size_t size) throw(std::bad_alloc) +{ + 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() +{ + return user_new(size, x); +} + +//E Replace operator delete. +//J operator delete と置き換わる +void user_delete(void *ptr) throw() +{ + //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; + + user_delete(ptr); +} + +//E Replace operator delete[]. +//J operator delete[] と置き換わる +void user_delete_array(void *ptr) throw() +{ + 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() +{ + user_delete(ptr, x); +} |
