/** * Returns set fully checked against dependency (deep, recursive) */ DependencyIdSet DependencySolver::extractDeepDependencyUnits( const dependency::DependencyIdSet& entrySet, const dependency::DependencyIdMap& ancestorsDependencyMap) { dependency::DependencyIdSet retSet; //copy dependency::DependencyIdSet firstStep = extractDependencyUnits(entrySet, ancestorsDependencyMap); //contains element that are not in retSet (new one) dependency::DependencyIdVector newElems(firstStep.begin(), firstStep.end()); //copy while(newElems.size()>0) { dependency::DependencyId unit = newElems.back(); newElems.pop_back(); retSet.insert(unit); //check if unit have dependencies if (ancestorsDependencyMap.count(unit) > 0) { const dependency::DependencyIdSet& depSet = ancestorsDependencyMap.at(unit); dependency::DependencyIdSet::const_iterator diter = depSet.begin(); dependency::DependencyIdSet::const_iterator deiter = depSet.end(); for(; diter!=deiter; diter++) { DependencyId dId = *diter; if(retSet.count(dId)<=0) { //new element newElems.push_back(dId); } } } } return retSet; }
// Add a T entry template<class T> void Foam::meshRefinement::updateList ( const labelList& newToOld, const T& nullValue, List<T>& elems ) { List<T> newElems(newToOld.size(), nullValue); forAll(newElems, i) { label oldI = newToOld[i]; if (oldI >= 0) { newElems[i] = elems[oldI]; } }