status.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #pragma once
  2. namespace jvalidate {
  3. class Status {
  4. public:
  5. enum Enum { Accept, Reject, Noop };
  6. private:
  7. Enum state_;
  8. public:
  9. Status(bool state) : state_(state ? Accept : Reject) {}
  10. Status(Enum state) : state_(state) {}
  11. operator bool() const { return state_ == Accept; }
  12. friend Status operator!(Status val) {
  13. if (val.state_ == Noop) {
  14. return Status::Noop;
  15. }
  16. return val.state_ == Reject ? Accept : Reject;
  17. }
  18. friend Status operator|(Status lhs, Status rhs) {
  19. if (lhs.state_ == Noop && rhs.state_ == Noop) {
  20. return Noop;
  21. }
  22. if (lhs.state_ == Reject || rhs.state_ == Reject) {
  23. return Reject;
  24. }
  25. return Accept;
  26. }
  27. friend Status operator&(Status lhs, Status rhs) {
  28. if (lhs.state_ == Noop && rhs.state_ == Noop) {
  29. return Noop;
  30. }
  31. if (lhs.state_ == Accept && rhs.state_ == Accept) {
  32. return Accept;
  33. }
  34. return Reject;
  35. }
  36. Status & operator&=(Status rhs) { return *this = *this & rhs; }
  37. Status & operator|=(Status rhs) { return *this = *this | rhs; }
  38. };
  39. }