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