17 #ifndef _DECAF_UTIL_STLQUEUE_H_
18 #define _DECAF_UTIL_STLQUEUE_H_
71 class QueueIterator :
public Iterator<T> {
74 typename std::list<T>::iterator current;
75 typename std::list<T>::iterator previous;
76 typename std::list<T>* queue;
80 QueueIterator(
typename std::list<T>* queue ) :
81 current( queue->begin() ), previous( queue->end() ), queue( queue ) {
84 virtual ~QueueIterator() {}
87 if( this->current == queue->end() ) {
90 "Queue::Iterator::next - No more elements to return" );
93 this->previous = this->current;
94 return *( this->current++ );
97 virtual bool hasNext()
const {
98 return ( this->current != queue->end() );
101 virtual void remove() {
102 if( this->previous == queue->end() ) {
105 "Queue::Iterator::remove - Invalid State to call remove" );
108 this->queue->erase( this->previous );
109 this->previous = this->queue->end();
124 return new QueueIterator( &queue );
139 if( queue.empty() ) {
143 return queue.front();
151 if( queue.empty() ) {
155 return queue.front();
163 if( queue.empty() ) {
175 if( queue.empty() ) {
187 queue.push_back( t );
195 queue.push_front( t );
203 if( queue.empty() ) {
209 T temp = queue.front();
228 return queue.empty();
235 std::vector<T> valueArray( queue.begin(), queue.end() );
246 target.queue.insert( target.queue.end(), queue.rbegin(), queue.rend() );
267 virtual void wait(
long long millisecs ) {
268 mutex.
wait( millisecs );
271 virtual void wait(
long long millisecs,
int nanos ) {
272 mutex.
wait( millisecs, nanos );