90 bool sparesAsLeaves)
const {
91 if (elemsInSubtree.count(this->id()) > 0)
93 if (std::find(parentsOfSubRoot.begin(), parentsOfSubRoot.end(), mId) != parentsOfSubRoot.end()) {
95 elemsInSubtree.clear();
98 elemsInSubtree.insert(mId);
99 for (
auto const& parent : mParents) {
100 if (blockParents && std::find(parentsOfSubRoot.begin(), parentsOfSubRoot.end(), parent->id()) != parentsOfSubRoot.end()) {
103 parent->extendSubDft(elemsInSubtree, parentsOfSubRoot, blockParents, sparesAsLeaves);
104 if (elemsInSubtree.empty()) {
108 for (
auto const& dep : mOutgoingDependencies) {
109 dep->extendSubDft(elemsInSubtree, parentsOfSubRoot, blockParents, sparesAsLeaves);
110 if (elemsInSubtree.empty()) {
115 for (
auto const& restr : mRestrictions) {
116 restr->extendSubDft(elemsInSubtree, parentsOfSubRoot, blockParents, sparesAsLeaves);
117 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 ...