87 bool sparesAsLeaves)
const {
88 if (elemsInSubtree.count(this->id()) > 0)
90 if (std::find(parentsOfSubRoot.begin(), parentsOfSubRoot.end(), mId) != parentsOfSubRoot.end()) {
92 elemsInSubtree.clear();
95 elemsInSubtree.insert(mId);
96 for (
auto const& parent : mParents) {
97 if (blockParents && std::find(parentsOfSubRoot.begin(), parentsOfSubRoot.end(), parent->id()) != parentsOfSubRoot.end()) {
100 parent->extendSubDft(elemsInSubtree, parentsOfSubRoot, blockParents, sparesAsLeaves);
101 if (elemsInSubtree.empty()) {
105 for (
auto const& dep : mOutgoingDependencies) {
106 dep->extendSubDft(elemsInSubtree, parentsOfSubRoot, blockParents, sparesAsLeaves);
107 if (elemsInSubtree.empty()) {
112 for (
auto const& restr : mRestrictions) {
113 restr->extendSubDft(elemsInSubtree, parentsOfSubRoot, blockParents, sparesAsLeaves);
114 if (elemsInSubtree.empty()) {
virtual void extendSubDft(std::set< size_t > &elemsInSubtree, std::vector< size_t > const &parentsOfSubRoot, bool blockParents, bool sparesAsLeaves) const
Helper to the independent subtree computation.
virtual std::vector< size_t > independentSubDft(bool blockParents, bool sparesAsLeaves=false) const
Computes independent subtrees starting with this element (this), that is, all elements (x) which are ...