Files

106 lines
2.3 KiB
Plaintext

#pragma GCC system_header
#ifndef _LIBCXX_NEW
#define _LIBCXX_NEW
#include <cstddef>
#include <cstdlib>
_LIBCXX_BEGIN_NAMESPACE_STD
enum class nothrow_t {};
enum class align_val_t : std::size_t {};
_LIBCXX_END_NAMESPACE_STD
inline void* operator new(size_t size)
{
return std::malloc(size);
}
inline void* operator new[](size_t size)
{
return std::malloc(size);
}
inline void* operator new(size_t size, const std::nothrow_t&) noexcept
{
return std::malloc(size);
}
inline void* operator new[](size_t size, const std::nothrow_t&) noexcept
{
return std::malloc(size);
}
inline void* operator new(size_t size, std::align_val_t alignment)
{
size_t aln = static_cast<size_t>(alignment);
void* ptr = std::malloc(size + sizeof(void*) + aln);
size_t max_addr = (size_t)ptr + sizeof(void*) + aln;
void* aligned_ptr = (void*)(max_addr - (max_addr % aln));
((void**)aligned_ptr)[-1] = ptr;
return aligned_ptr;
}
inline void* operator new[](size_t size, std::align_val_t alignment)
{
return ::operator new(size, alignment);
}
inline void* operator new(size_t size, std::align_val_t alignment, const std::nothrow_t&) noexcept
{
size_t aln = static_cast<size_t>(alignment);
void* ptr = std::malloc(size + sizeof(void*) + aln);
size_t max_addr = (size_t)ptr + sizeof(void*) + aln;
void* aligned_ptr = (void*)(max_addr - (max_addr % aln));
((void**)aligned_ptr)[-1] = ptr;
return aligned_ptr;
}
inline void* operator new[](size_t size, std::align_val_t alignment, const std::nothrow_t& nothrow) noexcept
{
return ::operator new(size, alignment, nothrow);
}
inline void* operator new(size_t, void* ptr) noexcept
{
return ptr;
}
inline void* operator new[](size_t, void* ptr) noexcept
{
return ptr;
}
inline void operator delete(void* ptr) noexcept
{
return std::free(ptr);
}
inline void operator delete(void* ptr, size_t) noexcept
{
return std::free(ptr);
}
inline void operator delete[](void* ptr) noexcept
{
return std::free(ptr);
}
inline void operator delete[](void* ptr, size_t) noexcept
{
return std::free(ptr);
}
inline void operator delete(void* ptr, std::align_val_t alignment) noexcept
{
std::free(((void**)ptr)[-1]);
}
inline void operator delete[](void* ptr, std::align_val_t alignment) noexcept
{
::operator delete(ptr, alignment);
}
#endif // _LIBCXX_NEW