PageRenderTime 45ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/tags/Root-branch-php-utl/SWIG/Examples/python/exceptshadow/example.h

#
C++ Header | 54 lines | 46 code | 6 blank | 2 comment | 4 complexity | 3d5feac2d80f40b04c82d536b9d39757 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. #if defined(_MSC_VER)
  10. #pragma warning(disable: 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
  11. #endif
  12. template<typename T> class Queue {
  13. int maxsize;
  14. T *items;
  15. int nitems;
  16. int last;
  17. public:
  18. Queue(int size) {
  19. maxsize = size;
  20. items = new T[size];
  21. nitems = 0;
  22. last = 0;
  23. }
  24. ~Queue() {
  25. delete [] items;
  26. }
  27. void enqueue(T x) throw(FullError) {
  28. if (nitems == maxsize) {
  29. throw FullError(maxsize);
  30. }
  31. items[last] = x;
  32. last = (last + 1) % maxsize;
  33. nitems++;
  34. }
  35. T dequeue() {
  36. T x;
  37. if (nitems == 0) throw EmptyError();
  38. x = items[(last + maxsize - nitems) % maxsize];
  39. nitems--;
  40. return x;
  41. }
  42. int length() {
  43. return nitems;
  44. }
  45. };
  46. #if defined(_MSC_VER)
  47. #pragma warning(default: 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
  48. #endif