Skip to content
Snippets Groups Projects
OptionalBool.cpp 2.06 KiB
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>

#include <ostream>
#include <utility>

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) {}

Owen Arnold's avatar
Owen Arnold committed
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}};
Owen Arnold's avatar
Owen Arnold committed
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);
Owen Arnold's avatar
Owen Arnold committed
  }
  return map;
/**
 * 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