| | | | | |

Defining Deque<>

template <typename T>
class Deque
{
public:
  // scope Deque<T>:: type definitions
  typedef T                ValueType;
  typedef DequeIterator<T> Iterator;

  // constructors - specify size and an initial value
  Deque  ();
  Deque  (size_t, const T&);
  Deque  (const Deque<T>&);     

  // destructor
  virtual ~Deque();

  // member operators
  Deque<T>&  operator =  (const Deque<T>&);
  T&         operator [] (size_t);
  const T&   operator [] (size_t) const;

  // Container class protocol
  bool      Empty       () const;
  size_t    Size        () const;
  bool      PushFront   (const T&);
  bool      PopFront    ();
  bool      PushBack    (const T&);
  bool      PopBack     ();
  void      Clear       ();
  T&        Front       ();
  const T&  Front       () const;
  T&        Back        ();
  const T&  Back        () const;

  // Iterator support
  friend class DequeIterator<T>;
  Iterator     Begin       ();
  Iterator     End         ();
  Iterator     rBegin      ();
  Iterator     rEnd        ();

  // Generic display methods 
  void Display    (std::ostream& os, char ofc = '\0') const;
  void Dump       (std::ostream& os) const;

protected:
  // classic circular array implementation
  T*     content_;
  size_t contentSize_, beg_, end_;
} ;

// operator overloads (friend status not required)

template < class T >
std::ostream& operator << (std::ostream& os, const Deque<T>& a);

template < class T >
bool     operator == (const Deque<T>&, const Deque<T>&); 

template < class T >
bool     operator != (const Deque<T>&, const Deque<T>&); 

| | Top of Page | 4. Generic Positional Containers and Double Ended Queues - 6 of 10