Morph suggestion

Remove code used for pre c++20
This commit is contained in:
Levi Behunin
2021-10-21 23:56:23 -06:00
parent 564ecb71ec
commit c8f0fc00b0

View File

@@ -25,19 +25,10 @@ SOFTWARE.
#include <atomic> #include <atomic>
#include <cassert> #include <cassert>
#include <cstddef> // offsetof #include <cstddef> // offsetof
#include <limits>
#include <memory> #include <memory>
#include <new> // std::hardware_destructive_interference_size #include <new> // std::hardware_destructive_interference_size
#include <stdexcept> #include <stdexcept>
#ifndef __cpp_aligned_new
#ifdef _WIN32
#include <malloc.h> // _aligned_malloc
#else
#include <stdlib.h> // posix_memalign
#endif
#endif
namespace Common { namespace Common {
namespace mpmc { namespace mpmc {
#ifdef __cpp_lib_hardware_interference_size #ifdef __cpp_lib_hardware_interference_size
@@ -51,41 +42,8 @@ static constexpr size_t hardwareInterferenceSize = 64;
#pragma warning(suppress : 4324) #pragma warning(suppress : 4324)
#endif #endif
#if defined(__cpp_aligned_new)
template <typename T> template <typename T>
using AlignedAllocator = std::allocator<T>; using AlignedAllocator = std::allocator<T>;
#else
template <typename T>
struct AlignedAllocator {
using value_type = T;
T* allocate(std::size_t n) {
if (n > std::numeric_limits<std::size_t>::max() / sizeof(T)) {
throw std::bad_array_new_length();
}
#ifdef _WIN32
auto* p = static_cast<T*>(_aligned_malloc(sizeof(T) * n, alignof(T)));
if (p == nullptr) {
throw std::bad_alloc();
}
#else
T* p;
if (posix_memalign(reinterpret_cast<void**>(&p), alignof(T), sizeof(T) * n) != 0) {
throw std::bad_alloc();
}
#endif
return p;
}
void deallocate(T* p, std::size_t) {
#ifdef _WIN32
_aligned_free(p);
#else
free(p);
#endif
}
};
#endif
template <typename T> template <typename T>
struct Slot { struct Slot {
@@ -269,11 +227,7 @@ private:
private: private:
const size_t capacity_; const size_t capacity_;
Slot<T>* slots_; Slot<T>* slots_;
#if defined(__has_cpp_attribute) && __has_cpp_attribute(no_unique_address) [[no_unique_address]] Allocator allocator_;
Allocator allocator_ [[no_unique_address]];
#else
Allocator allocator_;
#endif
// Align to avoid false sharing between head_ and tail_ // Align to avoid false sharing between head_ and tail_
alignas(hardwareInterferenceSize) std::atomic<size_t> head_; alignas(hardwareInterferenceSize) std::atomic<size_t> head_;