|
|
@ -184,6 +184,23 @@ namespace storm { |
|
|
|
this->cuddAdd = this->cuddAdd.OrAbstract(cubeDd.getCuddAdd()); |
|
|
|
} |
|
|
|
|
|
|
|
void Dd<DdType::CUDD>::universalAbstract(std::set<std::string> const& metaVariableNames) { |
|
|
|
Dd<DdType::CUDD> cubeDd(this->getDdManager()->getOne()); |
|
|
|
|
|
|
|
for (auto const& metaVariableName : metaVariableNames) { |
|
|
|
// First check whether the DD contains the meta variable and erase it, if this is the case.
|
|
|
|
if (!this->containsMetaVariable(metaVariableName)) { |
|
|
|
throw storm::exceptions::InvalidArgumentException() << "Cannot abstract from meta variable that is not present in the DD."; |
|
|
|
} |
|
|
|
this->getContainedMetaVariableNames().erase(metaVariableName); |
|
|
|
|
|
|
|
DdMetaVariable<DdType::CUDD> const& metaVariable = this->getDdManager()->getMetaVariable(metaVariableName); |
|
|
|
cubeDd *= metaVariable.getCube(); |
|
|
|
} |
|
|
|
|
|
|
|
this->cuddAdd = this->cuddAdd.UnivAbstract(cubeDd.getCuddAdd()); |
|
|
|
} |
|
|
|
|
|
|
|
void Dd<DdType::CUDD>::sumAbstract(std::set<std::string> const& metaVariableNames) { |
|
|
|
Dd<DdType::CUDD> cubeDd(this->getDdManager()->getOne()); |
|
|
|
|
|
|
|