/* * Queue.h * */ #ifndef _Queue_h_ #define _Queue_h_ #include template class Queue { private: int _front, _back, _count; T *_data; int _maxitems; public: Queue(int maxitems = 256) { _front = 0; _back = 0; _count = 0; _maxitems = maxitems; _data = new T[maxitems + 1]; } ~Queue() { delete[] _data; } inline int count(); inline int front(); inline int back(); void push(const T &item); T peek(); T pop(); void clear(); }; template inline int Queue::count() { return _count; } template inline int Queue::front() { return _front; } template inline int Queue::back() { return _back; } template void Queue::push(const T &item) { if(_count < _maxitems) { // Drops out when full _data[_back++]=item; ++_count; // Check wrap around if (_back > _maxitems) _back -= (_maxitems + 1); } } template T Queue::pop() { if(_count <= 0) return T(); // Returns empty else { T result = _data[_front]; _front++; --_count; // Check wrap around if (_front > _maxitems) _front -= (_maxitems + 1); return result; } } template T Queue::peek() { if(_count <= 0) return T(); // Returns empty else return _data[_front]; } template void Queue::clear() { _front = _back; _count = 0; } #endif // _Queue_h_