From de80de3828a60f0af55ccfcacecde1de9213fa2c Mon Sep 17 00:00:00 2001 From: mutouyun Date: Sat, 6 Jan 2024 18:10:52 +0800 Subject: [PATCH] Refactor regular_sizeof function and fix type conversion warnings in test_pmr_new.cpp --- include/libpmr/new.h | 28 ++++++++++++++++------------ test/pmr/test_pmr_new.cpp | 4 ++-- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/include/libpmr/new.h b/include/libpmr/new.h index 2ef15c8..7200987 100644 --- a/include/libpmr/new.h +++ b/include/libpmr/new.h @@ -22,21 +22,21 @@ LIBPMR_NAMESPACE_BEG_ constexpr inline std::size_t regular_level(std::size_t s) noexcept { - if (s <= 128 ) return 0; - if (s <= 1024 ) return 1; - if (s <= 8192 ) return 2; - if (s <= 65536) return 3; - return 4; + return (s <= 128 ) ? 0 : + (s <= 1024 ) ? 1 : + (s <= 8192 ) ? 2 : + (s <= 65536) ? 3 : 4; +} + +constexpr inline std::size_t regular_sizeof_impl(std::size_t l, std::size_t s) noexcept { + return (l == 0) ? std::max(::LIBIMP::round_up(s, 8), regular_head_size) : + (l == 1) ? ::LIBIMP::round_up(s, 128) : + (l == 2) ? ::LIBIMP::round_up(s, 1024) : + (l == 3) ? ::LIBIMP::round_up(s, 8192) : (std::numeric_limits::max)(); } constexpr inline std::size_t regular_sizeof(std::size_t s) noexcept { - switch (regular_level(s)) { - case 0 : return std::max(::LIBIMP::round_up(s, 8), regular_head_size); - case 1 : return ::LIBIMP::round_up(s, 128); - case 2 : return ::LIBIMP::round_up(s, 1024); - case 3 : return ::LIBIMP::round_up(s, 8192); - default: return (std::numeric_limits::max)(); - } + return regular_sizeof_impl(regular_level(s), s); } template @@ -179,7 +179,11 @@ void delete$(T *p) noexcept { ::LIBIMP::destroy(p); auto *mem_res = regular_resource()>::get(); if (mem_res == nullptr) return; +#if defined(LIBIMP_CC_MSVC_2015) + mem_res->deallocate(p, sizeof(T)); +#else mem_res->deallocate(p, sizeof(T), alignof(T)); +#endif } LIBPMR_NAMESPACE_END_ diff --git a/test/pmr/test_pmr_new.cpp b/test/pmr/test_pmr_new.cpp index dff6663..fbf9aa5 100644 --- a/test/pmr/test_pmr_new.cpp +++ b/test/pmr/test_pmr_new.cpp @@ -42,12 +42,12 @@ template void test_new$array() { std::array pts; using T = std::array; - for (int i = 0; i < pts.size(); ++i) { + for (int i = 0; i < (int)pts.size(); ++i) { auto p = pmr::new$(); pts[i] = p; std::memset(p, i, sizeof(T)); } - for (int i = 0; i < pts.size(); ++i) { + for (int i = 0; i < (int)pts.size(); ++i) { T tmp; std::memset(&tmp, i, sizeof(T)); ASSERT_EQ(std::memcmp(pts[i], &tmp, sizeof(T)), 0);