/* This file is part of MAUS: http://micewww.pp.rl.ac.uk/projects/maus
*
* MAUS is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MAUS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MAUS. If not, see .
*/
#include "src/common_cpp/JsonCppProcessors/PrimitivesProcessors.hh"
#include
#include "src/common_cpp/Utils/JsonWrapper.hh"
#include "Utils/Exception.hh"
namespace MAUS {
double* DoubleProcessor::JsonToCpp(const Json::Value& json_double) {
if (json_double.isNumeric()) {
return new double (json_double.asDouble());
} else {
throw(Exceptions::Exception(
Exceptions::recoverable,
"Failed to convert json value to double",
"DoubleProcessor::JsonToCpp"
));
}
return NULL; // appease gcc
}
Json::Value* DoubleProcessor::CppToJson(const double& cpp_double) {
return new Json::Value(cpp_double);
}
Json::Value* DoubleProcessor::CppToJson
(const double& cpp_double, std::string path) {
Json::Value* json_double = new Json::Value(cpp_double);
JsonWrapper::Path::SetPath(*json_double, path);
return json_double;
}
std::string* StringProcessor::JsonToCpp(const Json::Value& json_string) {
if (json_string.isString()) {
return new std::string (json_string.asString());
} else {
throw(Exceptions::Exception(
Exceptions::recoverable,
"Failed to convert json value to string",
"StringProcessor::JsonToCpp"
));
}
}
Json::Value* StringProcessor::CppToJson(const std::string& cpp_string) {
return new Json::Value(cpp_string);
}
Json::Value* StringProcessor::CppToJson
(const std::string& cpp_string, std::string path) {
Json::Value* json_string = new Json::Value(cpp_string);
JsonWrapper::Path::SetPath(*json_string, path);
return json_string;
}
int* IntProcessor::JsonToCpp(const Json::Value& json_int) {
if (json_int.isInt()) {
return new int (json_int.asInt());
} else {
throw(Exceptions::Exception(
Exceptions::recoverable,
"Failed to convert json value to integer",
"IntProcessor::JsonToCpp"
));
}
}
Json::Value* IntProcessor::CppToJson(const int& cpp_int) {
return new Json::Value(cpp_int);
}
Json::Value* IntProcessor::CppToJson
(const int& cpp_int, std::string path) {
Json::Value* json_int = new Json::Value(cpp_int);
JsonWrapper::Path::SetPath(*json_int, path);
return json_int;
}
unsigned int* UIntProcessor::JsonToCpp(const Json::Value& json_uint) {
if (json_uint.isUInt()) {
return new unsigned int (json_uint.asUInt());
} else if (json_uint.isInt() && json_uint.asInt() >= 0) {
return new unsigned int (json_uint.asUInt());
} else {
std::stringstream message;
message << "Failed to convert json value \"" << json_uint << "\""
<< " to unsigned int";
throw(Exceptions::Exception(
Exceptions::recoverable,
message.str(),
"UIntProcessor::JsonToCpp"
));
}
}
Json::Value* UIntProcessor::CppToJson(const unsigned int& cpp_uint) {
return new Json::Value(cpp_uint);
}
Json::Value* UIntProcessor::CppToJson
(const unsigned int& cpp_uint, std::string path) {
Json::Value* json_uint = new Json::Value(Json::UInt(cpp_uint));
JsonWrapper::Path::SetPath(*json_uint, path);
return json_uint;
}
uint64* LLUIntProcessor::JsonToCpp(const Json::Value& json_string) {
if (!json_string.isString()) {
throw(Exceptions::Exception(
Exceptions::recoverable,
"Failed to convert json value to long long int - not a string type",
"LLUIntProcessor::JsonToCpp"
));
}
std::string cpp_string = json_string.asString();
if (cpp_string[0] == '-') {
throw(Exceptions::Exception(
Exceptions::recoverable,
"Failed to convert json value to long long int - value was negative",
"LLUIntProcessor::JsonToCpp"
));
}
uint64* cpp_int = new uint64(STLUtils::FromString(cpp_string));
return cpp_int;
}
Json::Value* LLUIntProcessor::CppToJson
(const uint64& cpp_uint64) {
return new Json::Value(STLUtils::ToString(cpp_uint64));
}
Json::Value* LLUIntProcessor::CppToJson
(const uint64& cpp_uint64, std::string path) {
Json::Value* json_uint64 = CppToJson(cpp_uint64);
JsonWrapper::Path::SetPath(*json_uint64, path);
return json_uint64;
}
uint64_t* UInt64Processor::JsonToCpp(const Json::Value& json_string) {
if (json_string.isUInt()) {
uint64_t* cpp_int = new uint64_t(json_string.asUInt());
return cpp_int;
}
if (!json_string.isString()) {
throw(Exceptions::Exception(
Exceptions::recoverable,
"Failed to convert json value to long long int - not a string type or uint type",
"UIntProcessor64::JsonToCpp"
));
}
std::string cpp_string = json_string.asString();
if (cpp_string[0] == '-') {
throw(Exceptions::Exception(
Exceptions::recoverable,
"Failed to convert json value to long long int - value was negative",
"UIntProcessor64::JsonToCpp"
));
}
uint64_t* cpp_int = new uint64_t(STLUtils::FromString(cpp_string));
return cpp_int;
}
Json::Value* UInt64Processor::CppToJson
(const uint64_t& cpp_uint64) {
return new Json::Value(STLUtils::ToString(cpp_uint64));
}
Json::Value* UInt64Processor::CppToJson
(const uint64_t& cpp_uint64, std::string path) {
Json::Value* json_uint64 = CppToJson(cpp_uint64);
JsonWrapper::Path::SetPath(*json_uint64, path);
return json_uint64;
}
bool* BoolProcessor::JsonToCpp(const Json::Value& json_bool) {
if (json_bool.isBool()) {
return new bool (json_bool.asBool());
} else {
throw(Exceptions::Exception(
Exceptions::recoverable,
"Failed to convert json value to bool",
"BoolProcessor::JsonToCpp"
));
}
}
Json::Value* BoolProcessor::CppToJson(const bool& cpp_bool) {
return new Json::Value(cpp_bool);
}
Json::Value* BoolProcessor::CppToJson
(const bool& cpp_bool, std::string path) {
Json::Value* json_bool = new Json::Value(cpp_bool);
JsonWrapper::Path::SetPath(*json_bool, path);
return json_bool;
}
}