Browse Source

DFT: parse number from JSON

tempestpy_adaptions
Matthias Volk 6 years ago
parent
commit
856d62513b
  1. 21
      src/storm-dft/parser/DFTJsonParser.cpp
  2. 2
      src/storm-dft/parser/DFTJsonParser.h

21
src/storm-dft/parser/DFTJsonParser.cpp

@ -82,7 +82,7 @@ namespace storm {
} else if (type == "or") { } else if (type == "or") {
success = builder.addOrElement(name, childNames); success = builder.addOrElement(name, childNames);
} else if (type == "vot") { } else if (type == "vot") {
std::string votThreshold = data.at("voting");
std::string votThreshold = parseJsonNumber(data.at("voting"));
success = builder.addVotElement(name, boost::lexical_cast<unsigned>(votThreshold), childNames); success = builder.addVotElement(name, boost::lexical_cast<unsigned>(votThreshold), childNames);
} else if (type == "pand") { } else if (type == "pand") {
success = builder.addPandElement(name, childNames); success = builder.addPandElement(name, childNames);
@ -95,11 +95,11 @@ namespace storm {
} else if (type== "fdep") { } else if (type== "fdep") {
success = builder.addDepElement(name, childNames, storm::utility::one<ValueType>()); success = builder.addDepElement(name, childNames, storm::utility::one<ValueType>());
} else if (type== "pdep") { } else if (type== "pdep") {
ValueType probability = parseRationalExpression(data.at("prob"));
ValueType probability = parseRationalExpression(parseJsonNumber(data.at("prob")));
success = builder.addDepElement(name, childNames, probability); success = builder.addDepElement(name, childNames, probability);
} else if (type == "be") { } else if (type == "be") {
ValueType failureRate = parseRationalExpression(data.at("rate"));
ValueType dormancyFactor = parseRationalExpression(data.at("dorm"));
ValueType failureRate = parseRationalExpression(parseJsonNumber(data.at("rate")));
ValueType dormancyFactor = parseRationalExpression(parseJsonNumber(data.at("dorm")));
bool transient = false; bool transient = false;
if (data.count("transient") > 0) { if (data.count("transient") > 0) {
transient = data.at("transient"); transient = data.at("transient");
@ -123,12 +123,23 @@ namespace storm {
STORM_LOG_THROW(success, storm::exceptions::FileIoException, "Error while adding element '" << element << "'."); STORM_LOG_THROW(success, storm::exceptions::FileIoException, "Error while adding element '" << element << "'.");
} }
std::string toplevelName = nameMapping[parsedJson.at("toplevel")];
std::string toplevelName = nameMapping[parseJsonNumber(parsedJson.at("toplevel"))];
if(!builder.setTopLevel(toplevelName)) { if(!builder.setTopLevel(toplevelName)) {
STORM_LOG_THROW(false, storm::exceptions::FileIoException, "Top level id unknown."); STORM_LOG_THROW(false, storm::exceptions::FileIoException, "Top level id unknown.");
} }
} }
template<typename ValueType>
std::string DFTJsonParser<ValueType>::parseJsonNumber(json number) {
if (number.is_string()) {
return number.get<std::string>();
} else {
std::stringstream stream;
stream << number;
return stream.str();
}
}
template<typename ValueType> template<typename ValueType>
ValueType DFTJsonParser<ValueType>::parseRationalExpression(std::string const& expr) { ValueType DFTJsonParser<ValueType>::parseRationalExpression(std::string const& expr) {
STORM_LOG_ASSERT(false, "Specialized method should be called."); STORM_LOG_ASSERT(false, "Specialized method should be called.");

2
src/storm-dft/parser/DFTJsonParser.h

@ -41,6 +41,8 @@ namespace storm {
std::string generateUniqueName(std::string const& id, std::string const& name); std::string generateUniqueName(std::string const& id, std::string const& name);
ValueType parseRationalExpression(std::string const& expr); ValueType parseRationalExpression(std::string const& expr);
std::string parseJsonNumber(json number);
}; };
} }
} }
Loading…
Cancel
Save