/* File : example.h */

// A simple exception
class EmptyError { };
class FullError { 
 public:
  int maxsize;
  FullError(int m) : maxsize(m) { }
};

template<typename T> class Queue {
  int maxsize;
  T   *items;
  int nitems;
  int last;
 public: 
  Queue(int size) {
    maxsize = size;
    items = new T[size];
    nitems = 0;
    last = 0;
  }
  ~Queue() {
    delete [] items;
  }
  void enqueue(T x) {
    if (nitems == maxsize) {
      throw FullError(maxsize);
    }
    items[last] = x;
    last = (last + 1) % maxsize;
    nitems++;
  }
  T dequeue() {
    T x;
    if (nitems == 0) throw EmptyError();
    x = items[(last + maxsize - nitems) % maxsize];
    nitems--;
    return x;
  }
  int length() {
    return nitems;
  }
};

