|
@ -93,8 +93,8 @@ namespace storm { |
|
|
if(children.size() <= 1) { |
|
|
if(children.size() <= 1) { |
|
|
STORM_LOG_ERROR("Dependencies require at least two children"); |
|
|
STORM_LOG_ERROR("Dependencies require at least two children"); |
|
|
} |
|
|
} |
|
|
if(mElements.count(name) != 0) { |
|
|
|
|
|
// Element with that name already exists. |
|
|
|
|
|
|
|
|
if (nameInUse(name)) { |
|
|
|
|
|
STORM_LOG_ERROR("Element with name '" << name << "' already exists."); |
|
|
return false; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -122,13 +122,11 @@ namespace storm { |
|
|
if(binaryDependencies) { |
|
|
if(binaryDependencies) { |
|
|
for (size_t i = 1; i < children.size(); ++i) { |
|
|
for (size_t i = 1; i < children.size(); ++i) { |
|
|
std::string nameDep = name + "_" + std::to_string(i); |
|
|
std::string nameDep = name + "_" + std::to_string(i); |
|
|
if (mElements.count(nameDep) != 0) { |
|
|
|
|
|
// Element with that name already exists. |
|
|
|
|
|
STORM_LOG_ERROR("Element with name: " << nameDep << " already exists."); |
|
|
|
|
|
|
|
|
if (nameInUse(nameDep)) { |
|
|
|
|
|
STORM_LOG_ERROR("Element with name '" << name << "' already exists."); |
|
|
return false; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
STORM_LOG_ASSERT(storm::utility::isOne(probability) || children.size() == 2, |
|
|
|
|
|
"PDep with multiple children supported."); |
|
|
|
|
|
|
|
|
STORM_LOG_ASSERT(storm::utility::isOne(probability) || children.size() == 2, "PDep with multiple children supported."); |
|
|
DFTDependencyPointer element = std::make_shared<storm::storage::DFTDependency<ValueType>>(mNextId++, nameDep, probability); |
|
|
DFTDependencyPointer element = std::make_shared<storm::storage::DFTDependency<ValueType>>(mNextId++, nameDep, probability); |
|
|
mElements[element->name()] = element; |
|
|
mElements[element->name()] = element; |
|
|
mDependencyChildNames[element] = {trigger, children[i]}; |
|
|
mDependencyChildNames[element] = {trigger, children[i]}; |
|
@ -146,8 +144,8 @@ namespace storm { |
|
|
|
|
|
|
|
|
bool addVotElement(std::string const& name, unsigned threshold, std::vector<std::string> const& children) { |
|
|
bool addVotElement(std::string const& name, unsigned threshold, std::vector<std::string> const& children) { |
|
|
STORM_LOG_ASSERT(children.size() > 0, "Has no child."); |
|
|
STORM_LOG_ASSERT(children.size() > 0, "Has no child."); |
|
|
if(mElements.count(name) != 0) { |
|
|
|
|
|
STORM_LOG_ERROR("Element with name: " << name << " already exists."); |
|
|
|
|
|
|
|
|
if (nameInUse(name)) { |
|
|
|
|
|
STORM_LOG_ERROR("Element with name '" << name << "' already exists."); |
|
|
return false; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
// It is an and-gate |
|
|
// It is an and-gate |
|
@ -174,19 +172,33 @@ namespace storm { |
|
|
//TODO Matthias: collect constraints for SMT solving |
|
|
//TODO Matthias: collect constraints for SMT solving |
|
|
//failureRate > 0 |
|
|
//failureRate > 0 |
|
|
//0 <= dormancyFactor <= 1 |
|
|
//0 <= dormancyFactor <= 1 |
|
|
STORM_LOG_ASSERT(mElements.find(name) == mElements.end(), "Element '" << name << "' already exists."); |
|
|
|
|
|
|
|
|
if (nameInUse(name)) { |
|
|
|
|
|
STORM_LOG_ERROR("Element with name '" << name << "' already exists."); |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
mElements[name] = std::make_shared<storm::storage::DFTBE<ValueType>>(mNextId++, name, failureRate, dormancyFactor, transient); |
|
|
mElements[name] = std::make_shared<storm::storage::DFTBE<ValueType>>(mNextId++, name, failureRate, dormancyFactor, transient); |
|
|
return true; |
|
|
return true; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void addLayoutInfo(std::string const& name, double x, double y) { |
|
|
void addLayoutInfo(std::string const& name, double x, double y) { |
|
|
STORM_LOG_ASSERT(mElements.count(name) > 0, "Element '" << name << "' not found."); |
|
|
|
|
|
|
|
|
if (!nameInUse(name)) { |
|
|
|
|
|
STORM_LOG_ERROR("Element with name '" << name << "' not found."); |
|
|
|
|
|
} |
|
|
mLayoutInfo[name] = storm::storage::DFTLayoutInfo(x, y); |
|
|
mLayoutInfo[name] = storm::storage::DFTLayoutInfo(x, y); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bool setTopLevel(std::string const& tle) { |
|
|
bool setTopLevel(std::string const& tle) { |
|
|
mTopLevelIdentifier = tle; |
|
|
mTopLevelIdentifier = tle; |
|
|
return mElements.count(tle) > 0; |
|
|
|
|
|
|
|
|
return nameInUse(tle); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Check whether the name is already used. |
|
|
|
|
|
* @param name Element name. |
|
|
|
|
|
* @return True iff name is already in use. |
|
|
|
|
|
*/ |
|
|
|
|
|
bool nameInUse(std::string const& name) { |
|
|
|
|
|
return mElements.find(name) != mElements.end(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
std::string getUniqueName(std::string name); |
|
|
std::string getUniqueName(std::string name); |
|
|