Reorganize cpp APIs and suppress unused function warnings

This commit is contained in:
Yinan Zhang 2020-03-13 10:00:50 -07:00
parent 2e5899c129
commit b30a5c2f90

View File

@ -97,43 +97,6 @@ newImpl(std::size_t size) noexcept(IsNoExcept) {
return handleOOM(size, IsNoExcept); return handleOOM(size, IsNoExcept);
} }
#if __cpp_aligned_new >= 201606
template <bool IsNoExcept>
JEMALLOC_ALWAYS_INLINE
void *
alignedNewImpl(std::size_t size, std::align_val_t alignment) noexcept(IsNoExcept) {
void *ptr = je_aligned_alloc(static_cast<std::size_t>(alignment), size);
if (likely(ptr != nullptr)) {
return ptr;
}
return handleOOM(size, IsNoExcept);
}
#endif // __cpp_aligned_new
JEMALLOC_ALWAYS_INLINE
void
sizedDeleteImpl(void* ptr, std::size_t size) noexcept {
if (unlikely(ptr == nullptr)) {
return;
}
je_sdallocx_noflags(ptr, size);
}
#if __cpp_aligned_new >= 201606
JEMALLOC_ALWAYS_INLINE
void
alignedSizedDeleteImpl(void* ptr, std::size_t size, std::align_val_t alignment) noexcept {
if (config_debug) {
assert(((size_t)alignment & ((size_t)alignment - 1)) == 0);
}
if (unlikely(ptr == nullptr)) {
return;
}
je_sdallocx(ptr, size, MALLOCX_ALIGN(alignment));
}
#endif // __cpp_aligned_new
void * void *
operator new(std::size_t size) { operator new(std::size_t size) {
return newImpl<false>(size); return newImpl<false>(size);
@ -156,19 +119,31 @@ operator new[](std::size_t size, const std::nothrow_t &) noexcept {
#if __cpp_aligned_new >= 201606 #if __cpp_aligned_new >= 201606
template <bool IsNoExcept>
JEMALLOC_ALWAYS_INLINE
void *
alignedNewImpl(std::size_t size, std::align_val_t alignment) noexcept(IsNoExcept) {
void *ptr = je_aligned_alloc(static_cast<std::size_t>(alignment), size);
if (likely(ptr != nullptr)) {
return ptr;
}
return handleOOM(size, IsNoExcept);
}
void * void *
operator new(std::size_t size, std::align_val_t alignment) { operator new(std::size_t size, std::align_val_t alignment) {
return alignedNewImpl<false>(size, alignment); return alignedNewImpl<false>(size, alignment);
} }
void * void *
operator new(std::size_t size, std::align_val_t alignment, const std::nothrow_t &) noexcept { operator new[](std::size_t size, std::align_val_t alignment) {
return alignedNewImpl<true>(size, alignment); return alignedNewImpl<false>(size, alignment);
} }
void * void *
operator new[](std::size_t size, std::align_val_t alignment) { operator new(std::size_t size, std::align_val_t alignment, const std::nothrow_t &) noexcept {
return alignedNewImpl<false>(size, alignment); return alignedNewImpl<true>(size, alignment);
} }
void * void *
@ -199,6 +174,15 @@ void operator delete[](void *ptr, const std::nothrow_t &) noexcept {
#if __cpp_sized_deallocation >= 201309 #if __cpp_sized_deallocation >= 201309
JEMALLOC_ALWAYS_INLINE
void
sizedDeleteImpl(void* ptr, std::size_t size) noexcept {
if (unlikely(ptr == nullptr)) {
return;
}
je_sdallocx_noflags(ptr, size);
}
void void
operator delete(void *ptr, std::size_t size) noexcept { operator delete(void *ptr, std::size_t size) noexcept {
sizedDeleteImpl(ptr, size); sizedDeleteImpl(ptr, size);
@ -213,18 +197,30 @@ operator delete[](void *ptr, std::size_t size) noexcept {
#if __cpp_aligned_new >= 201606 #if __cpp_aligned_new >= 201606
JEMALLOC_ALWAYS_INLINE
void
alignedSizedDeleteImpl(void* ptr, std::size_t size, std::align_val_t alignment) noexcept {
if (config_debug) {
assert(((size_t)alignment & ((size_t)alignment - 1)) == 0);
}
if (unlikely(ptr == nullptr)) {
return;
}
je_sdallocx(ptr, size, MALLOCX_ALIGN(alignment));
}
void void
operator delete(void* ptr, std::align_val_t) noexcept { operator delete(void* ptr, std::align_val_t) noexcept {
je_free(ptr); je_free(ptr);
} }
void void
operator delete(void* ptr, std::align_val_t, const std::nothrow_t&) noexcept { operator delete[](void* ptr, std::align_val_t) noexcept {
je_free(ptr); je_free(ptr);
} }
void void
operator delete[](void* ptr, std::align_val_t) noexcept { operator delete(void* ptr, std::align_val_t, const std::nothrow_t&) noexcept {
je_free(ptr); je_free(ptr);
} }