mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/Misc: Remove uses of std::aligned_storage (deprecated in future c++ standard)
This commit is contained in:
@@ -18,8 +18,9 @@
|
||||
#ifndef MPSCQueue_h__
|
||||
#define MPSCQueue_h__
|
||||
|
||||
#include <array>
|
||||
#include <atomic>
|
||||
#include <type_traits>
|
||||
#include <new>
|
||||
|
||||
namespace Trinity
|
||||
{
|
||||
@@ -92,12 +93,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 +109,9 @@ public:
|
||||
T* output;
|
||||
while (Dequeue(output))
|
||||
delete output;
|
||||
|
||||
// destruct our dummy atomic
|
||||
(_dummyPtr->*IntrusiveLink).~Atomic();
|
||||
}
|
||||
|
||||
void Enqueue(T* input)
|
||||
@@ -152,10 +158,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;
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
#include "AuctionHousePackets.h"
|
||||
#include "AuctionHouseMgr.h"
|
||||
#include "DB2Stores.h"
|
||||
#include "ObjectGuid.h"
|
||||
#include "Util.h"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user