summaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/optional_bool.cpp4
-rw-r--r--src/utils/optional_bool.hpp48
2 files changed, 34 insertions, 18 deletions
diff --git a/src/utils/optional_bool.cpp b/src/utils/optional_bool.cpp
index 1d1c375..56fdca2 100644
--- a/src/utils/optional_bool.cpp
+++ b/src/utils/optional_bool.cpp
@@ -1,8 +1,8 @@
#include <utils/optional_bool.hpp>
-std::ostream& operator<<(std::ostream& os, const std::optional<bool>& o)
+std::ostream& operator<<(std::ostream& os, const OptionalBool& o)
{
- os << std::to_string(o);
+ os << o.to_string();
return os;
}
diff --git a/src/utils/optional_bool.hpp b/src/utils/optional_bool.hpp
index c652ed3..867aca2 100644
--- a/src/utils/optional_bool.hpp
+++ b/src/utils/optional_bool.hpp
@@ -1,21 +1,37 @@
#pragma once
-#include <optional>
-
#include <string>
-namespace std
-{
-inline
-std::string to_string(const std::optional<bool> b)
+struct OptionalBool
{
- if (!b)
- return "unset";
- else if (*b)
- return "true";
- else
- return "false";
-}
-}
-
-std::ostream& operator<<(std::ostream& os, const std::optional<bool>& o);
+ OptionalBool() = default;
+
+ OptionalBool(bool value):
+ is_set(true), value(value) {}
+
+ void set_value(bool value)
+ {
+ this->is_set = true;
+ this->value = value;
+ }
+
+ void unset()
+ {
+ this->is_set = false;
+ }
+
+ std::string to_string() const
+ {
+ if (this->is_set == false)
+ return "unset";
+ else if (this->value)
+ return "true";
+ else
+ return "false";
+ }
+
+ bool is_set{false};
+ bool value{false};
+};
+
+std::ostream& operator<<(std::ostream& os, const OptionalBool& o);