*/
virtual void push( const T& item ) = 0;
+ /**
+ * View the item from the head of the queue.
+ *
+ * @return T next available object.
+ */
+ virtual T front() = 0;
+
/**
* Get an item from the head of the queue.
*
*/
virtual T pop() = 0;
+ /**
+ * Query the size of the queue
+ *
+ * @return size_t size of queue.
+ */
+ virtual size_t size() = 0;
+
protected:
/**
*
*/
virtual bool empty() {
SGGuard<SGLOCK> g(mutex);
- return fifo.empty();
+ return this->fifo.empty();
}
/**
*/
virtual void push( const T& item ) {
SGGuard<SGLOCK> g(mutex);
- fifo.push( item );
+ this->fifo.push( item );
+ }
+
+ /**
+ * View the item from the head of the queue.
+ *
+ * @return T next available object.
+ */
+ virtual T front() {
+ SGGuard<SGLOCK> g(mutex);
+ assert( ! this->fifo.empty() );
+ T item = this->fifo.front();
+ return item;
}
/**
virtual T pop() {
SGGuard<SGLOCK> g(mutex);
//if (fifo.empty()) throw NoSuchElementException();
- assert( ! fifo.empty() );
+ assert( ! this->fifo.empty() );
// if (fifo.empty())
// {
// mutex.unlock();
// pthread_exit( PTHREAD_CANCELED );
// }
- T item = fifo.front();
- fifo.pop();
+ T item = this->fifo.front();
+ this->fifo.pop();
return item;
}
+
+ /**
+ * Query the size of the queue
+ *
+ * @return size_t size of queue.
+ */
+ virtual size_t size() {
+ SGGuard<SGLOCK> g(mutex);
+ return this->fifo.size();
+ }
+
private:
/**
*/
virtual bool empty() {
SGGuard<SGMutex> g(mutex);
- return fifo.empty();
+ return this->fifo.empty();
}
/**
*/
virtual void push( const T& item ) {
SGGuard<SGMutex> g(mutex);
- fifo.push( item );
+ this->fifo.push( item );
not_empty.signal();
}
+ /**
+ * View the item from the head of the queue.
+ * Calling thread is not suspended
+ *
+ * @return T next available object.
+ */
+ virtual T front() {
+ SGGuard<SGMutex> g(mutex);
+
+ assert(this->fifo.empty() != true);
+ //if (fifo.empty()) throw ??
+
+ T item = this->fifo.front();
+ return item;
+ }
+
/**
* Get an item from the head of the queue.
* If no items are available then the calling thread is suspended
virtual T pop() {
SGGuard<SGMutex> g(mutex);
- while (fifo.empty())
+ while (this->fifo.empty())
not_empty.wait(mutex);
- assert(fifo.empty() != true);
+ assert(this->fifo.empty() != true);
//if (fifo.empty()) throw ??
- T item = fifo.front();
- fifo.pop();
+ T item = this->fifo.front();
+ this->fifo.pop();
return item;
}
+ /**
+ * Query the size of the queue
+ *
+ * @return size_t size of queue.
+ */
+ virtual size_t size() {
+ SGGuard<SGMutex> g(mutex);
+ return this->fifo.size();
+ }
+
private:
/**