Either.h 1.2 KB

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