|
22 | 22 | LIBPMR_NAMESPACE_BEG_
|
23 | 23 |
|
24 | 24 | constexpr inline std::size_t regular_level(std::size_t s) noexcept {
|
25 |
| - if (s <= 128 ) return 0; |
26 |
| - if (s <= 1024 ) return 1; |
27 |
| - if (s <= 8192 ) return 2; |
28 |
| - if (s <= 65536) return 3; |
29 |
| - return 4; |
| 25 | + return (s <= 128 ) ? 0 : |
| 26 | + (s <= 1024 ) ? 1 : |
| 27 | + (s <= 8192 ) ? 2 : |
| 28 | + (s <= 65536) ? 3 : 4; |
| 29 | +} |
| 30 | + |
| 31 | +constexpr inline std::size_t regular_sizeof_impl(std::size_t l, std::size_t s) noexcept { |
| 32 | + return (l == 0) ? std::max<std::size_t>(::LIBIMP::round_up<std::size_t>(s, 8), regular_head_size) : |
| 33 | + (l == 1) ? ::LIBIMP::round_up<std::size_t>(s, 128) : |
| 34 | + (l == 2) ? ::LIBIMP::round_up<std::size_t>(s, 1024) : |
| 35 | + (l == 3) ? ::LIBIMP::round_up<std::size_t>(s, 8192) : (std::numeric_limits<std::size_t>::max)(); |
30 | 36 | }
|
31 | 37 |
|
32 | 38 | constexpr inline std::size_t regular_sizeof(std::size_t s) noexcept {
|
33 |
| - switch (regular_level(s)) { |
34 |
| - case 0 : return std::max<std::size_t>(::LIBIMP::round_up<std::size_t>(s, 8), regular_head_size); |
35 |
| - case 1 : return ::LIBIMP::round_up<std::size_t>(s, 128); |
36 |
| - case 2 : return ::LIBIMP::round_up<std::size_t>(s, 1024); |
37 |
| - case 3 : return ::LIBIMP::round_up<std::size_t>(s, 8192); |
38 |
| - default: return (std::numeric_limits<std::size_t>::max)(); |
39 |
| - } |
| 39 | + return regular_sizeof_impl(regular_level(s), s); |
40 | 40 | }
|
41 | 41 |
|
42 | 42 | template <typename T>
|
@@ -179,7 +179,11 @@ void delete$(T *p) noexcept {
|
179 | 179 | ::LIBIMP::destroy(p);
|
180 | 180 | auto *mem_res = regular_resource<regular_sizeof<T>()>::get();
|
181 | 181 | if (mem_res == nullptr) return;
|
| 182 | +#if defined(LIBIMP_CC_MSVC_2015) |
| 183 | + mem_res->deallocate(p, sizeof(T)); |
| 184 | +#else |
182 | 185 | mem_res->deallocate(p, sizeof(T), alignof(T));
|
| 186 | +#endif |
183 | 187 | }
|
184 | 188 |
|
185 | 189 | LIBPMR_NAMESPACE_END_
|
0 commit comments