Core/Misc: Remove uses of std::aligned_storage (deprecated in future c++ standard)

# Conflicts:
#	src/common/Threading/MPSCQueue.h
#	src/server/game/Server/Packets/AuctionHousePackets.cpp
This commit is contained in:
Shauren
2022-05-11 13:59:41 +02:00
committed by Ovahlord
parent c63c81ef6c
commit b070267898

View File

@@ -18,8 +18,10 @@
#ifndef MPSCQueue_h__
#define MPSCQueue_h__
#include <array>
#include <atomic>
#include <utility>
#include <new>
namespace Trinity
{
@@ -92,12 +94,14 @@ private:
template<typename T, std::atomic<T*> T::* IntrusiveLink>
class MPSCQueueIntrusive
{
using Atomic = std::atomic<T*>;
public:
MPSCQueueIntrusive() : _dummyPtr(reinterpret_cast<T*>(std::addressof(_dummy))), _head(_dummyPtr), _tail(_dummyPtr)
MPSCQueueIntrusive() : _dummyPtr(reinterpret_cast<T*>(_dummy.data())), _head(_dummyPtr), _tail(_dummyPtr)
{
// _dummy is constructed from aligned_storage and is intentionally left uninitialized (it might not be default constructible)
// _dummy is constructed from raw byte array and is intentionally left uninitialized (it might not be default constructible)
// so we init only its IntrusiveLink here
std::atomic<T*>* dummyNext = new (&(_dummyPtr->*IntrusiveLink)) std::atomic<T*>();
Atomic* dummyNext = new (&(_dummyPtr->*IntrusiveLink)) Atomic();
dummyNext->store(nullptr, std::memory_order_relaxed);
}
@@ -106,6 +110,9 @@ public:
T* output;
while (Dequeue(output))
delete output;
// destruct our dummy atomic
(_dummyPtr->*IntrusiveLink).~Atomic();
}
void Enqueue(T* input)
@@ -152,10 +159,10 @@ public:
}
private:
std::aligned_storage_t<sizeof(T), alignof(T)> _dummy;
alignas(T) std::array<std::byte, sizeof(T)> _dummy;
T* _dummyPtr;
std::atomic<T*> _head;
std::atomic<T*> _tail;
Atomic _head;
Atomic _tail;
MPSCQueueIntrusive(MPSCQueueIntrusive const&) = delete;
MPSCQueueIntrusive& operator=(MPSCQueueIntrusive const&) = delete;