Skip to content

Instantly share code, notes, and snippets.

@serge-medvedev
Created April 7, 2018 06:05
Show Gist options
  • Select an option

  • Save serge-medvedev/205d6ca63eb4b1864798251c8bef9f53 to your computer and use it in GitHub Desktop.

Select an option

Save serge-medvedev/205d6ca63eb4b1864798251c8bef9f53 to your computer and use it in GitHub Desktop.
Queue
template < typename T >
class QueueT
{
public:
QueueT( int64_t max_size )
: _max_size( max_size )
, _size( 0 )
, _front( 0 )
, _rear( -1 )
{
assert( _max_size > 0 );
_items = new T [ _max_size ];
}
virtual ~QueueT()
{
delete [] _items;
_items = nullptr;
_max_size = 0;
_size = 0;
_front = 0;
_rear = -1;
}
void enqueue( T item )
{
if ( full() )
{
throw string( "overflow" );
}
_rear = ( _rear + 1 ) % _max_size;
_items[ _rear ] = item;
_size++;
}
void dequeue()
{
if ( empty() )
{
throw string( "underflow" );
}
_front = ( _front + 1 ) % _max_size;
_size--;
}
T peek() const
{
if ( empty() )
{
throw string( "underflow" );
}
return _items[ _front ];
}
bool full() const
{
return ( _size == _max_size );
}
bool empty() const
{
return ( _size == 0 );
}
int64_t size() const
{
return _size;
}
private:
int64_t _max_size;
int64_t _size;
int64_t _front, _rear;
T * _items;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment