PageRenderTime 49ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

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

#
C++ Header | 51 lines | 40 code | 9 blank | 2 comment | 4 complexity | 4adc435d86c942f65407e58a91f37e19 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  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. };