diff --git a/include/Topology/generic/genericmap.h b/include/Topology/generic/genericmap.h index 32c669e59d4806ec3cd14ddf54dea2dc3891b6ff..9ed29a269e62d984336a9ab11186847d76271b3d 100644 --- a/include/Topology/generic/genericmap.h +++ b/include/Topology/generic/genericmap.h @@ -447,7 +447,7 @@ public: void enableQuickTraversal() ; template - void updateQuickTraversal() ; + void updateQuickTraversal(const FunctorSelect& good = allDarts) ; template AttributeMultiVector* getQuickTraversal() ; diff --git a/include/Topology/generic/genericmap.hpp b/include/Topology/generic/genericmap.hpp index 231c21e5f5dc44e8e055d53063f4a4a90ed13e71..130ef8ed5851e0159f9e1801d4ebd13274954831 100644 --- a/include/Topology/generic/genericmap.hpp +++ b/include/Topology/generic/genericmap.hpp @@ -435,14 +435,14 @@ inline void GenericMap::enableQuickTraversal() } template -inline void GenericMap::updateQuickTraversal() +inline void GenericMap::updateQuickTraversal(const FunctorSelect& good) { assert(m_quickTraversal[ORBIT] != NULL || !"updateQuickTraversal on a disabled orbit") ; CellMarker cm(*this) ; for(Dart d = begin(); d != end(); next(d)) { - if(!cm.isMarked(d)) + if(good(d) && !cm.isMarked(d)) { cm.mark(d) ; (*m_quickTraversal[ORBIT])[getEmbedding(d)] = d ; diff --git a/include/Topology/generic/traversorCell.hpp b/include/Topology/generic/traversorCell.hpp index 62c68f2b060f203b338cf99360882aa9451eb26a..18d492c399432bc010370672948e5eb30197ed8a 100644 --- a/include/Topology/generic/traversorCell.hpp +++ b/include/Topology/generic/traversorCell.hpp @@ -29,30 +29,32 @@ template TraversorCell::TraversorCell(MAP& map, const FunctorSelect& good, bool forceDartMarker, unsigned int thread) : m(map), dmark(NULL), cmark(NULL), current(NIL), firstTraversal(true), m_good(good) { - quickTraversal = map.template getQuickTraversal() ; - if(quickTraversal != NULL) - { - cont = &(m.template getAttributeContainer()) ; - } + if(forceDartMarker) + dmark = new DartMarker(map, thread) ; else { - if(!forceDartMarker && map.template isOrbitEmbedded()) - cmark = new CellMarker(map, thread) ; + quickTraversal = map.template getQuickTraversal() ; + if(quickTraversal != NULL) + { + cont = &(m.template getAttributeContainer()) ; + } else - dmark = new DartMarker(map, thread) ; + { + if(map.template isOrbitEmbedded()) + cmark = new CellMarker(map, thread) ; + else + dmark = new DartMarker(map, thread) ; + } } } template TraversorCell::~TraversorCell() { - if(quickTraversal == NULL) - { - if(dmark) - delete dmark ; - else - delete cmark ; - } + if(dmark) + delete dmark ; + else if(cmark) + delete cmark ; } template