| | #ifndef OPENPOSE_THREAD_QUEUE_HPP |
| | #define OPENPOSE_THREAD_QUEUE_HPP |
| |
|
| | #include <queue> |
| | #include <openpose/core/common.hpp> |
| | #include <openpose/thread/queueBase.hpp> |
| |
|
| | namespace op |
| | { |
| | template<typename TDatums, typename TQueue = std::queue<TDatums>> |
| | class Queue : public QueueBase<TDatums, TQueue> |
| | { |
| | public: |
| | explicit Queue(const long long maxSize); |
| |
|
| | virtual ~Queue(); |
| |
|
| | TDatums front() const; |
| |
|
| | private: |
| | bool pop(TDatums& tDatums); |
| |
|
| | DELETE_COPY(Queue); |
| | }; |
| | } |
| |
|
| |
|
| |
|
| |
|
| |
|
| | |
| | #include <type_traits> |
| | namespace op |
| | { |
| | template<typename TDatums, typename TQueue> |
| | Queue<TDatums, TQueue>::Queue(const long long maxSize) : |
| | QueueBase<TDatums, TQueue>{maxSize} |
| | { |
| | |
| | typedef typename TQueue::value_type underlyingValueType; |
| | static_assert(std::is_same<TDatums, underlyingValueType>::value, |
| | "Error: The type of the queue must be the same as the type of the container"); |
| | } |
| |
|
| | template<typename TDatums, typename TQueue> |
| | Queue<TDatums, TQueue>::~Queue() |
| | { |
| | } |
| |
|
| | template<typename TDatums, typename TQueue> |
| | TDatums Queue<TDatums, TQueue>::front() const |
| | { |
| | try |
| | { |
| | const std::lock_guard<std::mutex> lock{this->mMutex}; |
| | return this->mTQueue.front(); |
| | } |
| | catch (const std::exception& e) |
| | { |
| | error(e.what(), __LINE__, __FUNCTION__, __FILE__); |
| | return TDatums{}; |
| | } |
| | } |
| |
|
| | template<typename TDatums, typename TQueue> |
| | bool Queue<TDatums, TQueue>::pop(TDatums& tDatums) |
| | { |
| | try |
| | { |
| | if (this->mPopIsStopped || this->mTQueue.empty()) |
| | return false; |
| |
|
| | tDatums = {std::move(this->mTQueue.front())}; |
| | this->mTQueue.pop(); |
| | this->mConditionVariable.notify_one(); |
| | return true; |
| | } |
| | catch (const std::exception& e) |
| | { |
| | error(e.what(), __LINE__, __FUNCTION__, __FILE__); |
| | return false; |
| | } |
| | } |
| |
|
| | COMPILE_TEMPLATE_DATUM(Queue); |
| | } |
| |
|
| | #endif |
| |
|