bound_number.hpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //
  2. // bound_number.hpp
  3. // utilities
  4. //
  5. // Created by Sam Jaffe on 10/22/13.
  6. // Copyright (c) 2013 Sam Jaffe. All rights reserved.
  7. //
  8. #pragma once
  9. template <class Tp, Tp MINIMUM_VALUE, Tp MAXIMUM_VALUE>
  10. class bound_number final {
  11. private:
  12. public:
  13. typedef Tp value_type;
  14. bound_number() = default;
  15. bound_number(const bound_number& other) = default;
  16. bound_number(bound_number&& other) = default;
  17. bound_number& operator=(const bound_number& other) = default;
  18. bound_number& operator=(bound_number&& other) = default;
  19. ~bound_number() = default;
  20. bound_number(const Tp value) :
  21. value(value) {
  22. }
  23. bound_number& operator --() {
  24. if (value > MINIMUM_VALUE) {
  25. --value;
  26. }
  27. return *this;
  28. }
  29. bound_number& operator ++() {
  30. if (value < MAXIMUM_VALUE) {
  31. ++value;
  32. }
  33. return *this;
  34. }
  35. bound_number operator --(int) {
  36. bound_number tmp = *this;
  37. if (value > MINIMUM_VALUE) {
  38. --value;
  39. }
  40. return tmp;
  41. }
  42. bound_number operator ++(int) {
  43. bound_number tmp = *this;
  44. if (value < MAXIMUM_VALUE) {
  45. ++value;
  46. }
  47. return tmp;
  48. }
  49. operator Tp() const {
  50. return value;
  51. }
  52. private:
  53. Tp value;
  54. };