1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #pragma once
- #include <functional>
- #include "Betriebssystem.h"
- namespace Framework
- {
- template<typename T> class Maybe
- {
- private:
- bool set;
- T value;
- Maybe()
- {
- set = 0;
- }
- Maybe(T value)
- : set(1),
- value(value){};
- public:
- static Maybe<T> of(T value)
- {
- return Maybe(value);
- }
- static Maybe<T> empty()
- {
- return Maybe();
- }
- bool isEmpty() const
- {
- return !set;
- }
- bool isPresent() const
- {
- return set;
- }
- operator T() const
- {
- assert(set);
- return value;
- }
- void ifPresent(std::function<T> action)
- {
- if (set) action(value);
- }
- void ifNotPresent(std::function<T> action)
- {
- if (!set) action(value);
- }
- template<typename R> Maybe<R> map(std::function<R(T)> action)
- {
- if (set)
- return Maybe<R>::of(action(value));
- else
- return Maybe<R>::empty();
- }
- template<typename R> Maybe<R> flatMap(std::function<Maybe<R>(T)> action)
- {
- if (set)
- return action(value);
- else
- return Maybe<R>::empty();
- }
- T operator->()
- {
- assert(set);
- return value;
- }
- };
- } // namespace Framework
|