diff options
author | Shauren <shauren.trinity@gmail.com> | 2014-07-27 20:59:22 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2014-07-27 20:59:22 +0200 |
commit | 2cba07d6a1e319fec6d763daa69af3e29ba837c4 (patch) | |
tree | 990d4a22193c066fa9aa20a7c33b4330e9a60086 /src/server/shared/Threading/ProducerConsumerQueue.h | |
parent | 55eafa247d91e24bd59a369daa05b05d20334791 (diff) | |
parent | e502e01f5d16964e67685c956e204ae41b756d26 (diff) |
Merge branch 'master' of https://github.com/TrinityCore/TrinityCore into 4.3.4
Conflicts:
README.md
src/server/game/Entities/Object/Object.cpp
src/server/game/Entities/Object/Updates/UpdateData.h
src/server/game/Server/WorldPacket.h
src/server/game/Server/WorldSession.cpp
src/server/game/Server/WorldSession.h
src/server/game/Server/WorldSocket.cpp
src/server/game/Server/WorldSocket.h
src/server/shared/Packets/ByteBuffer.h
Diffstat (limited to 'src/server/shared/Threading/ProducerConsumerQueue.h')
-rw-r--r-- | src/server/shared/Threading/ProducerConsumerQueue.h | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/server/shared/Threading/ProducerConsumerQueue.h b/src/server/shared/Threading/ProducerConsumerQueue.h index 45a1cbc692a..1fee1d0685f 100644 --- a/src/server/shared/Threading/ProducerConsumerQueue.h +++ b/src/server/shared/Threading/ProducerConsumerQueue.h @@ -22,12 +22,11 @@ #include <mutex> #include <queue> #include <atomic> +#include <type_traits> template <typename T> class ProducerConsumerQueue { - static_assert(std::is_pointer<T>::value, "T for ProducerConsumerQueue must be a pointer"); - private: std::mutex _queueLock; std::queue<T> _queue; @@ -94,7 +93,7 @@ public: { T& value = _queue.front(); - delete value; + DeleteQueuedObject(value); _queue.pop(); } @@ -105,8 +104,13 @@ public: _condition.notify_all(); } -}; -#endif +private: + template<typename E = T> + typename std::enable_if<std::is_pointer<E>::value>::type DeleteQueuedObject(E& obj) { delete obj; } + template<typename E = T> + typename std::enable_if<!std::is_pointer<E>::value>::type DeleteQueuedObject(E const& /*packet*/) { } +}; +#endif |