diff --git a/libs/sir/include/psemek/sir/optional.hpp b/libs/sir/include/psemek/sir/optional.hpp new file mode 100644 index 00000000..f049a672 --- /dev/null +++ b/libs/sir/include/psemek/sir/optional.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include +#include +#include + +#include + +namespace psemek::sir +{ + + template + requires (is_ostream_v && !is_custom_v>) + void write(Stream & s, std::optional const & x) + { + write(s, static_cast(x)); + if (x) write(s, *x); + } + + template + requires (is_istream_v && !is_custom_v>) + void read(Stream & s, std::optional & x) + { + bool initialized = false; + read(s, initialized); + if (initialized) + { + x.emplace(); + read(s, *x); + } + } + +}