/trunk/Examples/ruby/exception_class/example.h

# · C++ Header · 51 lines · 40 code · 9 blank · 2 comment · 4 complexity · 4adc435d86c942f65407e58a91f37e19 MD5 · raw file

  1. /* File : example.h */
  2. // A simple exception
  3. class EmptyError { };
  4. class FullError {
  5. public:
  6. int maxsize;
  7. FullError(int m) : maxsize(m) { }
  8. };
  9. template<typename T> class Queue {
  10. int maxsize;
  11. T *items;
  12. int nitems;
  13. int last;
  14. public:
  15. Queue(int size) {
  16. maxsize = size;
  17. items = new T[size];
  18. nitems = 0;
  19. last = 0;
  20. }
  21. ~Queue() {
  22. delete [] items;
  23. }
  24. void enqueue(T x) throw(FullError) {
  25. if (nitems == maxsize) {
  26. throw FullError(maxsize);
  27. }
  28. items[last] = x;
  29. last = (last + 1) % maxsize;
  30. nitems++;
  31. }
  32. T dequeue() {
  33. T x;
  34. if (nitems == 0) throw EmptyError();
  35. x = items[(last + maxsize - nitems) % maxsize];
  36. nitems--;
  37. return x;
  38. }
  39. int length() {
  40. return nitems;
  41. }
  42. };