#pragma once #include #include "lock\lock.h" using namespace CleverLock; template< typename T> class CQueueWithLock :public CWithLock { public: CQueueWithLock(void); ~CQueueWithLock(void); void Push(T &m); bool Front(T &m); bool Pop(T &m); bool Pop(); inline bool IsEmpty(); int Size(); void Clear(); protected: deque m_Queue; }; template< typename T> CQueueWithLock::CQueueWithLock() { } template< typename T> CQueueWithLock::~CQueueWithLock() { Clear(); } template< typename T> void CQueueWithLock::Push(T &m) { LOCK(*this); m_Queue.push_back(m); } template< typename T> bool CQueueWithLock::Front(T &m) { LOCK(*this); if (m_Queue.empty()) return false; m = m_Queue.front(); return true; } template< typename T> bool CQueueWithLock::Pop(T &m) { LOCK(*this); if (!Front(m)) return false; m_Queue.pop_front(); return true; } template< typename T> bool CQueueWithLock::Pop() { LOCK(*this); if (m_Queue.empty()) return false; m_Queue.pop_front(); return true; } template< typename T> bool CQueueWithLock::IsEmpty() { LOCK(*this); return m_Queue.empty(); } template< typename T> int CQueueWithLock::Size() { LOCK(*this); return (int)m_Queue.size(); } template< typename T> void CQueueWithLock::Clear() { LOCK(*this); m_Queue.clear(); }