Newer
Older
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
// NScD Oak Ridge National Laboratory, European Spallation Source
// & Institut Laue - Langevin
// SPDX - License - Identifier: GPL - 3.0 +
#include "MantidKernel/OptionalBool.h"
#include "MantidKernel/Exception.h"
#include <json/value.h>
namespace Mantid {
namespace Kernel {
const std::string OptionalBool::StrUnset = "Unset";
const std::string OptionalBool::StrFalse = "False";
const std::string OptionalBool::StrTrue = "True";
OptionalBool::OptionalBool() : m_arg(Unset) {}
OptionalBool::OptionalBool(bool arg) { m_arg = arg ? True : False; }
OptionalBool::OptionalBool(Value arg) : m_arg(arg) {}
bool OptionalBool::operator==(const OptionalBool &other) const {
return m_arg == other.getValue();
}
OptionalBool::Value OptionalBool::getValue() const { return m_arg; }
std::ostream &operator<<(std::ostream &os, OptionalBool const &object) {
os << OptionalBool::enumToStrMap()[object.getValue()];
return os;
}
std::istream &operator>>(std::istream &istream, OptionalBool &object) {
std::string result;
istream >> result;
object.m_arg = OptionalBool::strToEmumMap()[result];
return istream;
}
std::map<std::string, OptionalBool::Value> OptionalBool::strToEmumMap() {
return {{StrUnset, OptionalBool::Unset},
{StrFalse, OptionalBool::False},
{StrTrue, OptionalBool::True}};
std::map<OptionalBool::Value, std::string> OptionalBool::enumToStrMap() {
std::map<Value, std::string> map;
auto opposite = strToEmumMap();
for (auto &oppositePair : opposite) {
map.emplace(oppositePair.second, oppositePair.first);
/**
* Encode an OptionalBool as a Json::Value. Throws as it's not clear how to
* serialize this type.
* @return A new Json::Value
*/
Json::Value encodeAsJson(const OptionalBool & /*unused*/) {
throw Exception::NotImplementedError(
"encodeAsJson not implemented for OptionalBool type");
}
} // namespace Kernel
} // namespace Mantid