/* 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;
  }
};

