X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fthreads%2FSGQueue.hxx;h=37122c5ae150be619b48a62e85cba2ad1a6393ea;hb=5af8bb7c8e259f5bdda67beb87adcc453e0b32e7;hp=e7311e56d9f33c7130ecc32e1ae5609f9be33c3e;hpb=9442d3d0f31646c93083a9ca5707438b41068155;p=simgear.git diff --git a/simgear/threads/SGQueue.hxx b/simgear/threads/SGQueue.hxx index e7311e56..37122c5a 100644 --- a/simgear/threads/SGQueue.hxx +++ b/simgear/threads/SGQueue.hxx @@ -5,9 +5,8 @@ #include #include -#include -#include -#include +#include "SGGuard.hxx" +#include "SGThread.hxx" /** * SGQueue defines an interface for a FIFO. @@ -66,7 +65,7 @@ public: protected: /** - * + * */ std::queue fifo; }; @@ -74,7 +73,7 @@ protected: /** * A simple thread safe queue. All access functions are guarded with a mutex. */ -template +template class SGLockedQueue : public SGQueue { public: @@ -95,7 +94,7 @@ public: * @return bool True if queue is empty, otherwisr false. */ virtual bool empty() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); return this->fifo.empty(); } @@ -105,7 +104,7 @@ public: * @param T object to add. */ virtual void push( const T& item ) { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); this->fifo.push( item ); } @@ -115,7 +114,7 @@ public: * @return T next available object. */ virtual T front() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); assert( ! this->fifo.empty() ); T item = this->fifo.front(); return item; @@ -127,7 +126,7 @@ public: * @return T next available object. */ virtual T pop() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); //if (fifo.empty()) throw NoSuchElementException(); assert( ! this->fifo.empty() ); // if (fifo.empty()) @@ -146,7 +145,7 @@ public: * @return size_t size of queue. */ virtual size_t size() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); return this->fifo.size(); } @@ -155,7 +154,7 @@ private: /** * Mutex to serialise access. */ - SGLOCK mutex; + SGMutex mutex; private: // Prevent copying. @@ -182,10 +181,10 @@ public: ~SGBlockingQueue() {} /** - * + * */ virtual bool empty() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); return this->fifo.empty(); } @@ -195,7 +194,7 @@ public: * @param T object to add. */ virtual void push( const T& item ) { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); this->fifo.push( item ); not_empty.signal(); } @@ -207,7 +206,7 @@ public: * @return T next available object. */ virtual T front() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); assert(this->fifo.empty() != true); //if (fifo.empty()) throw ?? @@ -223,10 +222,10 @@ public: * @return T next available object. */ virtual T pop() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); while (this->fifo.empty()) - not_empty.wait(&mutex); + not_empty.wait(mutex); assert(this->fifo.empty() != true); //if (fifo.empty()) throw ?? @@ -242,7 +241,7 @@ public: * @return size_t size of queue. */ virtual size_t size() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); return this->fifo.size(); } @@ -251,12 +250,12 @@ private: /** * Mutex to serialise access. */ - OpenThreads::Mutex mutex; + SGMutex mutex; /** * Condition to signal when queue not empty. */ - OpenThreads::Condition not_empty; + SGWaitCondition not_empty; private: // Prevent copying. @@ -284,10 +283,18 @@ public: ~SGBlockingDeque() {} /** - * + * + */ + virtual void clear() { + SGGuard g(mutex); + this->queue.clear(); + } + + /** + * */ virtual bool empty() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); return this->queue.empty(); } @@ -297,7 +304,7 @@ public: * @param T object to add. */ virtual void push_front( const T& item ) { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); this->queue.push_front( item ); not_empty.signal(); } @@ -308,7 +315,7 @@ public: * @param T object to add. */ virtual void push_back( const T& item ) { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); this->queue.push_back( item ); not_empty.signal(); } @@ -320,7 +327,7 @@ public: * @return T next available object. */ virtual T front() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); assert(this->queue.empty() != true); //if (queue.empty()) throw ?? @@ -336,10 +343,10 @@ public: * @return T next available object. */ virtual T pop_front() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); while (this->queue.empty()) - not_empty.wait(&mutex); + not_empty.wait(mutex); assert(this->queue.empty() != true); //if (queue.empty()) throw ?? @@ -356,10 +363,10 @@ public: * @return T next available object. */ virtual T pop_back() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); while (this->queue.empty()) - not_empty.wait(&mutex); + not_empty.wait(mutex); assert(this->queue.empty() != true); //if (queue.empty()) throw ?? @@ -375,7 +382,7 @@ public: * @return size_t size of queue. */ virtual size_t size() { - OpenThreads::ScopedLock g(mutex); + SGGuard g(mutex); return this->queue.size(); } @@ -384,12 +391,12 @@ private: /** * Mutex to serialise access. */ - OpenThreads::Mutex mutex; + SGMutex mutex; /** * Condition to signal when queue not empty. */ - OpenThreads::Condition not_empty; + SGWaitCondition not_empty; private: // Prevent copying.