Either.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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( const Either<A, B>& b )
  15. {
  16. a = b.isA();
  17. if( a )
  18. aValue = (A)b;
  19. else
  20. bValue = (B)b;
  21. }
  22. Either( A a )
  23. {
  24. aValue = a;
  25. this->a = 1;
  26. }
  27. Either( B b )
  28. {
  29. bValue = b;
  30. a = 0;
  31. }
  32. bool isA() const
  33. {
  34. return a;
  35. }
  36. bool isB() const
  37. {
  38. return !a;
  39. }
  40. A getA() const
  41. {
  42. return aValue;
  43. }
  44. B getB() const
  45. {
  46. return bValue;
  47. }
  48. void doIfA( std::function<A> action )
  49. {
  50. if( a )
  51. action( aValue );
  52. }
  53. void doIfB( std::function<B> action )
  54. {
  55. if( !a )
  56. action( bValue );
  57. }
  58. operator A() const
  59. {
  60. assert( a );
  61. return aValue;
  62. }
  63. operator B() const
  64. {
  65. assert( !a );
  66. return bValue;
  67. }
  68. };
  69. }