|
|
@ -682,16 +682,14 @@ namespace storm { |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
std::pair<std::vector<size_t>, std::vector<size_t>> influencedElem1Ids = getSortedParentAndOutDepIds(*it1); |
|
|
|
std::tuple<std::vector<size_t>, std::vector<size_t>, std::vector<size_t>> influencedElem1Ids = getSortedParentAndDependencyIds(*it1); |
|
|
|
auto it2 = it1; |
|
|
|
for(++it2; it2 != candidates.cend(); ++it2) { |
|
|
|
if(!getElement(*it2)->hasOnlyStaticParents()) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
std::vector<size_t> sortedParent2Ids = getElement(*it2)->parentIds(); |
|
|
|
std::sort(sortedParent2Ids.begin(), sortedParent2Ids.end()); |
|
|
|
|
|
|
|
if(influencedElem1Ids == getSortedParentAndOutDepIds(*it2)) { |
|
|
|
if(influencedElem1Ids == getSortedParentAndDependencyIds(*it2)) { |
|
|
|
std::map<size_t, size_t> bijection = findBijection(*it1, *it2, colouring, true); |
|
|
|
if (!bijection.empty()) { |
|
|
|
STORM_LOG_TRACE("Subdfts are symmetric"); |
|
|
@ -748,15 +746,25 @@ namespace storm { |
|
|
|
|
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
|
std::pair<std::vector<size_t>, std::vector<size_t>> DFT<ValueType>::getSortedParentAndOutDepIds(size_t index) const { |
|
|
|
std::pair<std::vector<size_t>, std::vector<size_t>> res; |
|
|
|
res.first = getElement(index)->parentIds(); |
|
|
|
std::sort(res.first.begin(), res.first.end()); |
|
|
|
std::tuple<std::vector<size_t>, std::vector<size_t>, std::vector<size_t>> DFT<ValueType>::getSortedParentAndDependencyIds(size_t index) const { |
|
|
|
// Parents
|
|
|
|
std::vector<size_t> parents = getElement(index)->parentIds(); |
|
|
|
std::sort(parents.begin(), parents.end()); |
|
|
|
// Ingoing dependencies
|
|
|
|
std::vector<size_t> ingoingDeps; |
|
|
|
if (isBasicElement(index)) { |
|
|
|
for(auto const& dep : getBasicElement(index)->ingoingDependencies()) { |
|
|
|
ingoingDeps.push_back(dep->id()); |
|
|
|
} |
|
|
|
std::sort(ingoingDeps.begin(), ingoingDeps.end()); |
|
|
|
} |
|
|
|
// Outgoing dependencies
|
|
|
|
std::vector<size_t> outgoingDeps; |
|
|
|
for(auto const& dep : getElement(index)->outgoingDependencies()) { |
|
|
|
res.second.push_back(dep->id()); |
|
|
|
outgoingDeps.push_back(dep->id()); |
|
|
|
} |
|
|
|
std::sort(res.second.begin(), res.second.end()); |
|
|
|
return res; |
|
|
|
std::sort(outgoingDeps.begin(), outgoingDeps.end()); |
|
|
|
return std::make_tuple(parents, ingoingDeps, outgoingDeps); |
|
|
|
} |
|
|
|
|
|
|
|
// Explicitly instantiate the class.
|
|
|
|