Either.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #pragma once
  2. #include <functional>
  3. #include "Betriebssystem.h"
  4. namespace Framework
  5. {
  6. template<typename A, typename B> class Either
  7. {
  8. private:
  9. A aValue;
  10. B bValue;
  11. bool a;
  12. public:
  13. Either(const Either<A, B>& b)
  14. {
  15. a = b.isA();
  16. if (a)
  17. aValue = (A)b;
  18. else
  19. bValue = (B)b;
  20. }
  21. Either(A a)
  22. {
  23. aValue = a;
  24. this->a = 1;
  25. }
  26. Either(B b)
  27. {
  28. bValue = b;
  29. a = 0;
  30. }
  31. bool isA() const
  32. {
  33. return a;
  34. }
  35. bool isB() const
  36. {
  37. return !a;
  38. }
  39. A getA() const
  40. {
  41. return aValue;
  42. }
  43. B getB() const
  44. {
  45. return bValue;
  46. }
  47. void doIfA(std::function<A> action)
  48. {
  49. if (a) action(aValue);
  50. }
  51. void doIfB(std::function<B> action)
  52. {
  53. if (!a) action(bValue);
  54. }
  55. operator A() const
  56. {
  57. assert(a);
  58. return aValue;
  59. }
  60. operator B() const
  61. {
  62. assert(!a);
  63. return bValue;
  64. }
  65. };
  66. } // namespace Framework