Commit cc63ab5a authored by Pierre Kraemer's avatar Pierre Kraemer

modify foreach_dart_of_<orbit> functions profile

parent e4ff0d46
...@@ -379,24 +379,23 @@ public: ...@@ -379,24 +379,23 @@ public:
virtual void next(Dart& d) const ; virtual void next(Dart& d) const ;
virtual bool foreach_dart_of_vertex(Dart d, FunctorType& f, unsigned int thread = 0) const ; void foreach_dart_of_vertex(Dart d, std::function<void (Dart)> f, unsigned int thread = 0) const ;
virtual bool foreach_dart_of_edge(Dart d, FunctorType& f, unsigned int thread = 0) const ; void foreach_dart_of_edge(Dart d, std::function<void (Dart)> f, unsigned int thread = 0) const ;
bool foreach_dart_of_oriented_face(Dart d, FunctorType& f, unsigned int thread = 0) const; void foreach_dart_of_oriented_face(Dart d, std::function<void (Dart)> f, unsigned int thread = 0) const;
virtual bool foreach_dart_of_face(Dart d, FunctorType& f, unsigned int thread = 0) const ; void foreach_dart_of_face(Dart d, std::function<void (Dart)> f, unsigned int thread = 0) const ;
bool foreach_dart_of_oriented_volume(Dart d, FunctorType& f, unsigned int thread = 0) const; void foreach_dart_of_oriented_volume(Dart d, std::function<void (Dart)> f, unsigned int thread = 0) const;
virtual bool foreach_dart_of_volume(Dart d, FunctorType& f, unsigned int thread = 0) const ; void foreach_dart_of_volume(Dart d, std::function<void (Dart)> f, unsigned int thread = 0) const ;
virtual bool foreach_dart_of_cc(Dart d, FunctorType& f, unsigned int thread = 0) const ; void foreach_dart_of_cc(Dart d, std::function<void (Dart)> f, unsigned int thread = 0) const ;
void foreach_dart_of_vertex2(Dart d, std::function<void (Dart)> f, unsigned int thread = 0) const;
virtual bool foreach_dart_of_vertex2(Dart d, FunctorType& f, unsigned int thread = 0) const; void foreach_dart_of_edge2(Dart d, std::function<void (Dart)> f, unsigned int thread = 0) const;
virtual bool foreach_dart_of_edge2(Dart d, FunctorType& f, unsigned int thread = 0) const; void foreach_dart_of_face2(Dart d, std::function<void (Dart)> f, unsigned int thread = 0) const;
virtual bool foreach_dart_of_face2(Dart d, FunctorType& f, unsigned int thread = 0) const;
//@} //@}
template <unsigned int ORBIT> template <unsigned int ORBIT>
......
...@@ -224,17 +224,16 @@ inline void ImplicitHierarchicalMap3::next(Dart& d) const ...@@ -224,17 +224,16 @@ inline void ImplicitHierarchicalMap3::next(Dart& d) const
} while(d != Map3::end() && m_dartLevel[d] > m_curLevel) ; } while(d != Map3::end() && m_dartLevel[d] > m_curLevel) ;
} }
inline bool ImplicitHierarchicalMap3::foreach_dart_of_vertex(Dart d, FunctorType& f, unsigned int thread) const inline void ImplicitHierarchicalMap3::foreach_dart_of_vertex(Dart d, std::function<void (Dart)> f, unsigned int thread) const
{ {
DartMarkerStore<Map3> mv(*this, thread); // Lock a marker DartMarkerStore<Map3> mv(*this, thread); // Lock a marker
bool found = false; // Last functor return value
std::vector<Dart> darts; // Darts that are traversed std::vector<Dart> darts; // Darts that are traversed
darts.reserve(256); darts.reserve(256);
darts.push_back(d); // Start with the dart d darts.push_back(d); // Start with the dart d
mv.mark(d); mv.mark(d);
for(unsigned int i = 0; !found && i < darts.size(); ++i) for(unsigned int i = 0; i < darts.size(); ++i)
{ {
// add phi21 and phi23 successor if they are not marked yet // add phi21 and phi23 successor if they are not marked yet
Dart d2 = phi2(darts[i]); Dart d2 = phi2(darts[i]);
...@@ -252,126 +251,110 @@ inline bool ImplicitHierarchicalMap3::foreach_dart_of_vertex(Dart d, FunctorType ...@@ -252,126 +251,110 @@ inline bool ImplicitHierarchicalMap3::foreach_dart_of_vertex(Dart d, FunctorType
mv.mark(d23); mv.mark(d23);
} }
found = f(darts[i]); f(darts[i]);
} }
return found;
} }
inline bool ImplicitHierarchicalMap3::foreach_dart_of_edge(Dart d, FunctorType& f, unsigned int thread) const inline void ImplicitHierarchicalMap3::foreach_dart_of_edge(Dart d, std::function<void (Dart)> f, unsigned int thread) const
{ {
Dart dNext = d; Dart dNext = d;
do { do {
if (foreach_dart_of_edge2(dNext, f, thread)) foreach_dart_of_edge2(dNext, f, thread);
return true;
dNext = alpha2(dNext); dNext = alpha2(dNext);
} while (dNext != d); } while (dNext != d);
return false;
} }
inline bool ImplicitHierarchicalMap3::foreach_dart_of_oriented_face(Dart d, FunctorType& f, unsigned int /*thread*/) const inline void ImplicitHierarchicalMap3::foreach_dart_of_oriented_face(Dart d, std::function<void (Dart)> f, unsigned int /*thread*/) const
{ {
Dart dNext = d ; Dart dNext = d ;
do do
{ {
if (f(dNext)) f(dNext);
return true ;
dNext = phi1(dNext) ; dNext = phi1(dNext) ;
} while (dNext != d) ; } while (dNext != d) ;
return false ;
} }
inline bool ImplicitHierarchicalMap3::foreach_dart_of_face(Dart d, FunctorType& f, unsigned int thread) const inline void ImplicitHierarchicalMap3::foreach_dart_of_face(Dart d, std::function<void (Dart)> f, unsigned int thread) const
{ {
return foreach_dart_of_oriented_face(d, f, thread) || foreach_dart_of_oriented_face(phi3(d), f, thread); foreach_dart_of_oriented_face(d, f, thread);
foreach_dart_of_oriented_face(phi3(d), f, thread);
} }
inline bool ImplicitHierarchicalMap3::foreach_dart_of_oriented_volume(Dart d, FunctorType& f, unsigned int thread) const inline void ImplicitHierarchicalMap3::foreach_dart_of_oriented_volume(Dart d, std::function<void (Dart)> f, unsigned int thread) const
{ {
DartMarkerStore<Map3> mark(*this, thread); // Lock a marker DartMarkerStore<Map3> mark(*this, thread); // Lock a marker
bool found = false; // Last functor return value
std::vector<Dart> visitedFaces; // Faces that are traversed std::vector<Dart> visitedFaces; // Faces that are traversed
visitedFaces.reserve(1024) ; visitedFaces.reserve(1024) ;
visitedFaces.push_back(d); // Start with the face of d visitedFaces.push_back(d); // Start with the face of d
// For every face added to the list // For every face added to the list
for(unsigned int i = 0; !found && i < visitedFaces.size(); ++i) for(unsigned int i = 0; i < visitedFaces.size(); ++i)
{ {
if (!mark.isMarked(visitedFaces[i])) // Face has not been visited yet if (!mark.isMarked(visitedFaces[i])) // Face has not been visited yet
{ {
// Apply functor to the darts of the face // Apply functor to the darts of the face
found = foreach_dart_of_oriented_face(visitedFaces[i], f); foreach_dart_of_oriented_face(visitedFaces[i], f);
// If functor returns false then mark visited darts (current face) // mark visited darts (current face)
// and add non visited adjacent faces to the list of face // and add non visited adjacent faces to the list of face
if (!found) Dart e = visitedFaces[i] ;
do
{ {
Dart e = visitedFaces[i] ; mark.mark(e); // Mark
do Dart adj = phi2(e); // Get adjacent face
{ if (!mark.isMarked(adj))
mark.mark(e); // Mark visitedFaces.push_back(adj); // Add it
Dart adj = phi2(e); // Get adjacent face e = phi1(e);
if (!mark.isMarked(adj)) } while(e != visitedFaces[i]);
visitedFaces.push_back(adj); // Add it
e = phi1(e);
} while(e != visitedFaces[i]);
}
} }
} }
return found;
} }
inline bool ImplicitHierarchicalMap3::foreach_dart_of_volume(Dart d, FunctorType& f, unsigned int thread) const inline void ImplicitHierarchicalMap3::foreach_dart_of_volume(Dart d, std::function<void (Dart)> f, unsigned int thread) const
{ {
return foreach_dart_of_oriented_volume(d, f, thread) ; foreach_dart_of_oriented_volume(d, f, thread) ;
} }
inline bool ImplicitHierarchicalMap3::foreach_dart_of_cc(Dart d, FunctorType& f, unsigned int thread) const inline void ImplicitHierarchicalMap3::foreach_dart_of_cc(Dart d, std::function<void (Dart)> f, unsigned int thread) const
{ {
DartMarkerStore<Map3> mark(*this, thread); // Lock a marker DartMarkerStore<Map3> mark(*this, thread); // Lock a marker
bool found = false; // Last functor return value
std::vector<Dart> visitedFaces; // Faces that are traversed std::vector<Dart> visitedFaces; // Faces that are traversed
visitedFaces.reserve(1024) ; visitedFaces.reserve(1024) ;
visitedFaces.push_back(d); // Start with the face of d visitedFaces.push_back(d); // Start with the face of d
// For every face added to the list // For every face added to the list
for(unsigned int i = 0; !found && i < visitedFaces.size(); ++i) for(unsigned int i = 0; i < visitedFaces.size(); ++i)
{ {
if (!mark.isMarked(visitedFaces[i])) // Face has not been visited yet if (!mark.isMarked(visitedFaces[i])) // Face has not been visited yet
{ {
// Apply functor to the darts of the face // Apply functor to the darts of the face
found = foreach_dart_of_face(visitedFaces[i], f); foreach_dart_of_face(visitedFaces[i], f);
// If functor returns false then mark visited darts (current face) // mark visited darts (current face)
// and add non visited adjacent faces to the list of face // and add non visited adjacent faces to the list of face
if (!found) Dart e = visitedFaces[i] ;
do
{ {
Dart e = visitedFaces[i] ; mark.mark(e); // Mark
do Dart adj = phi2(e); // Get adjacent face
{ if (!mark.isMarked(adj))
mark.mark(e); // Mark visitedFaces.push_back(adj); // Add it
Dart adj = phi2(e); // Get adjacent face e = phi1(e);
if (!mark.isMarked(adj)) } while(e != visitedFaces[i]);
visitedFaces.push_back(adj); // Add it
e = phi1(e);
} while(e != visitedFaces[i]);
}
} }
} }
return found;
// //return foreach_dart_of_oriented_volume(d, f) ; // // foreach_dart_of_oriented_volume(d, f) ;
// DartMarkerStore mv(*this,thread); // Lock a marker // DartMarkerStore mv(*this,thread); // Lock a marker
// bool found = false; // Last functor return value
// //
// std::vector<Dart> darts; // Darts that are traversed // std::vector<Dart> darts; // Darts that are traversed
// darts.reserve(1024); // darts.reserve(1024);
// darts.push_back(d); // Start with the dart d // darts.push_back(d); // Start with the dart d
// mv.mark(d); // mv.mark(d);
// //
// for(unsigned int i = 0; !found && i < darts.size(); ++i) // for(unsigned int i = 0; i < darts.size(); ++i)
// { // {
// // add all successors if they are not marked yet // // add all successors if they are not marked yet
// Dart d2 = phi1(darts[i]); // turn in face // Dart d2 = phi1(darts[i]); // turn in face
...@@ -394,34 +377,29 @@ inline bool ImplicitHierarchicalMap3::foreach_dart_of_cc(Dart d, FunctorType& f, ...@@ -394,34 +377,29 @@ inline bool ImplicitHierarchicalMap3::foreach_dart_of_cc(Dart d, FunctorType& f,
// mv.mark(d4); // mv.mark(d4);
// } // }
// //
// found = f(darts[i]); // f(darts[i]);
// } // }
// return found;
} }
inline void ImplicitHierarchicalMap3::foreach_dart_of_vertex2(Dart d, std::function<void (Dart)> f, unsigned int /*thread*/) const
inline bool ImplicitHierarchicalMap3::foreach_dart_of_vertex2(Dart d, FunctorType& f, unsigned int /*thread*/) const
{ {
Dart dNext = d; Dart dNext = d;
do do
{ {
if (f(dNext)) f(dNext);
return true;
dNext = phi2(phi_1(dNext)); dNext = phi2(phi_1(dNext));
} while (dNext != d); } while (dNext != d);
return false;
} }
inline bool ImplicitHierarchicalMap3::foreach_dart_of_edge2(Dart d, FunctorType& f, unsigned int /*thread*/) const inline void ImplicitHierarchicalMap3::foreach_dart_of_edge2(Dart d, std::function<void (Dart)> f, unsigned int /*thread*/) const
{ {
if (f(d)) f(d);
return true; f(phi2(d));
return f(phi2(d));
} }
inline bool ImplicitHierarchicalMap3::foreach_dart_of_face2(Dart d, FunctorType& f, unsigned int thread) const inline void ImplicitHierarchicalMap3::foreach_dart_of_face2(Dart d, std::function<void (Dart)> f, unsigned int thread) const
{ {
return foreach_dart_of_oriented_face(d,f,thread); foreach_dart_of_oriented_face(d, f, thread);
} }
/*************************************************** /***************************************************
......
...@@ -174,20 +174,20 @@ public: ...@@ -174,20 +174,20 @@ public:
* @param f a functor obj * @param f a functor obj
*/ */
template <unsigned int ORBIT> template <unsigned int ORBIT>
bool foreach_dart_of_orbit(Dart d, FunctorType& f, unsigned int thread = 0) const ; void foreach_dart_of_orbit(Dart d, std::function<void (Dart)> f, unsigned int thread = 0) const ;
virtual bool foreach_dart_of_vertex(Dart d, FunctorType& f, unsigned int thread = 0) const = 0 ; virtual void foreach_dart_of_vertex(Dart /*d*/, std::function<void (Dart)> /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; }
virtual bool foreach_dart_of_edge(Dart d, FunctorType& f, unsigned int thread = 0) const = 0 ; virtual void foreach_dart_of_edge(Dart /*d*/, std::function<void (Dart)> /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; }
virtual bool foreach_dart_of_face(Dart /*d*/, FunctorType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; } virtual void foreach_dart_of_face(Dart /*d*/, std::function<void (Dart)> /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; }
virtual bool foreach_dart_of_volume(Dart /*d*/, FunctorType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; } virtual void foreach_dart_of_volume(Dart /*d*/, std::function<void (Dart)> /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; }
virtual bool foreach_dart_of_cc(Dart /*d*/, FunctorType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; } virtual void foreach_dart_of_cc(Dart /*d*/, std::function<void (Dart)> /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; }
virtual bool foreach_dart_of_vertex1(Dart /*d*/, FunctorType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; } virtual void foreach_dart_of_vertex1(Dart /*d*/, std::function<void (Dart)> /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; }
virtual bool foreach_dart_of_edge1(Dart /*d*/, FunctorType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; } virtual void foreach_dart_of_edge1(Dart /*d*/, std::function<void (Dart)> /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; }
virtual bool foreach_dart_of_vertex2(Dart /*d*/, FunctorType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; } virtual void foreach_dart_of_vertex2(Dart /*d*/, std::function<void (Dart)> /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; }
virtual bool foreach_dart_of_edge2(Dart /*d*/, FunctorType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; } virtual void foreach_dart_of_edge2(Dart /*d*/, std::function<void (Dart)> /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; }
virtual bool foreach_dart_of_face2(Dart /*d*/, FunctorType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; } virtual void foreach_dart_of_face2(Dart /*d*/, std::function<void (Dart)> /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; }
/**************************************** /****************************************
* EMBEDDING MANAGEMENT * * EMBEDDING MANAGEMENT *
......
...@@ -218,23 +218,22 @@ void GenericMap::addEmbedding() ...@@ -218,23 +218,22 @@ void GenericMap::addEmbedding()
****************************************/ ****************************************/
template <unsigned int ORBIT> template <unsigned int ORBIT>
bool GenericMap::foreach_dart_of_orbit(Dart d, FunctorType& f, unsigned int thread) const void GenericMap::foreach_dart_of_orbit(Dart d, std::function<void (Dart)> f, unsigned int thread) const
{ {
switch(ORBIT) switch(ORBIT)
{ {
case DART: return f(d); case DART: f(d); break;
case VERTEX: return foreach_dart_of_vertex(d, f, thread); case VERTEX: foreach_dart_of_vertex(d, f, thread); break;
case EDGE: return foreach_dart_of_edge(d, f, thread); case EDGE: foreach_dart_of_edge(d, f, thread); break;
case FACE: return foreach_dart_of_face(d, f, thread); case FACE: foreach_dart_of_face(d, f, thread); break;
case VOLUME: return foreach_dart_of_volume(d, f, thread); case VOLUME: foreach_dart_of_volume(d, f, thread); break;
case VERTEX1: return foreach_dart_of_vertex1(d, f, thread); case VERTEX1: foreach_dart_of_vertex1(d, f, thread); break;
case EDGE1: return foreach_dart_of_edge1(d, f, thread); case EDGE1: foreach_dart_of_edge1(d, f, thread); break;
case VERTEX2: return foreach_dart_of_vertex2(d, f, thread); case VERTEX2: foreach_dart_of_vertex2(d, f, thread); break;
case EDGE2: return foreach_dart_of_edge2(d, f, thread); case EDGE2: foreach_dart_of_edge2(d, f, thread); break;
case FACE2: return foreach_dart_of_face2(d, f, thread); case FACE2: foreach_dart_of_face2(d, f, thread); break;
default: assert(!"Cells of this dimension are not handled"); break; default: assert(!"Cells of this dimension are not handled"); break;
} }
return false;
} }
/**************************************** /****************************************
......
...@@ -141,16 +141,16 @@ protected: ...@@ -141,16 +141,16 @@ protected:
void boundaryUnmark(Dart d) ; void boundaryUnmark(Dart d) ;
/** /**
* mark an orbit of dart as belonging to boundary * mark an orbit as belonging to boundary
*/ */
template <unsigned int ORBIT, unsigned int DIM> template <unsigned int DIM, unsigned int ORBIT>
void boundaryMarkOrbit(Dart d) ; void boundaryMarkOrbit(Cell<ORBIT> c) ;
/** /**
* unmark an orbit of dart from the boundary * unmark an orbit from the boundary
*/ */
template <unsigned int ORBIT, unsigned int DIM> template <unsigned int DIM, unsigned int ORBIT>
void boundaryUnmarkOrbit(Dart d) ; void boundaryUnmarkOrbit(Cell<ORBIT> c) ;
/** /**
* clear all boundary markers * clear all boundary markers
......
...@@ -41,21 +41,19 @@ unsigned int MapCommon<MAP_IMPL>::degree(Dart d) const ...@@ -41,21 +41,19 @@ unsigned int MapCommon<MAP_IMPL>::degree(Dart d) const
return fcount.getNb() ; return fcount.getNb() ;
} }
template <typename MAP_IMPL> template <typename MAP_IMPL>
template <unsigned int ORBIT> template <unsigned int ORBIT>
bool MapCommon<MAP_IMPL>::sameOrbit(Cell<ORBIT> c1, Cell<ORBIT> c2, unsigned int thread) const bool MapCommon<MAP_IMPL>::sameOrbit(Cell<ORBIT> c1, Cell<ORBIT> c2, unsigned int thread) const
{ {
TraversorDartsOfOrbit< MapCommon<MAP_IMPL>, ORBIT> tradoo(*this,c1.dart,thread); TraversorDartsOfOrbit<MapCommon<MAP_IMPL>, ORBIT> tradoo(*this, c1.dart, thread);
for (Dart x= tradoo.begin(); x!=tradoo.end();x=tradoo.next()) for (Dart x = tradoo.begin(); x != tradoo.end(); x = tradoo.next())
{ {
if (x==c2.dart) if (x == c2.dart)
return true; return true;
} }
return false; return false;
} }
/**************************************** /****************************************
* EMBEDDING MANAGEMENT * * EMBEDDING MANAGEMENT *
****************************************/ ****************************************/
...@@ -125,8 +123,10 @@ inline void MapCommon<MAP_IMPL>::setOrbitEmbedding(Cell<ORBIT> c, unsigned int e ...@@ -125,8 +123,10 @@ inline void MapCommon<MAP_IMPL>::setOrbitEmbedding(Cell<ORBIT> c, unsigned int e
{ {
assert(this->template isOrbitEmbedded<ORBIT>() || !"Invalid parameter: orbit not embedded"); assert(this->template isOrbitEmbedded<ORBIT>() || !"Invalid parameter: orbit not embedded");
FunctorSetEmb<MapCommon<MAP_IMPL>, ORBIT> fsetemb(*this, em); this->template foreach_dart_of_orbit<ORBIT>(c.dart, [&] (Dart d)
this->template foreach_dart_of_orbit<ORBIT>(c.dart, fsetemb); {
this->setDartEmbedding<ORBIT>(d, em);
});
} }
template <typename MAP_IMPL> template <typename MAP_IMPL>
...@@ -135,8 +135,10 @@ inline void MapCommon<MAP_IMPL>::initOrbitEmbedding(Cell<ORBIT> c, unsigned int ...@@ -135,8 +135,10 @@ inline void MapCommon<MAP_IMPL>::initOrbitEmbedding(Cell<ORBIT> c, unsigned int
{ {
assert(this->template isOrbitEmbedded<ORBIT>() || !"Invalid parameter: orbit not embedded"); assert(this->template isOrbitEmbedded<ORBIT>() || !"Invalid parameter: orbit not embedded");
FunctorInitEmb<MapCommon<MAP_IMPL>, ORBIT> finitemb(*this, em); this->template foreach_dart_of_orbit<ORBIT>(c.dart, [&] (Dart d)
this->template foreach_dart_of_orbit<ORBIT>(c.dart, finitemb); {
this->initDartEmbedding<ORBIT>(d, em);
});
} }
template <typename MAP_IMPL> template <typename MAP_IMPL>
...@@ -195,19 +197,23 @@ inline void MapCommon<MAP_IMPL>::boundaryUnmark(Dart d) ...@@ -195,19 +197,23 @@ inline void MapCommon<MAP_IMPL>::boundaryUnmark(Dart d)
} }
template <typename MAP_IMPL> template <typename MAP_IMPL>
template <unsigned int ORBIT, unsigned int DIM> template <unsigned int DIM, unsigned int ORBIT>
void MapCommon<MAP_IMPL>::boundaryMarkOrbit(Dart d) void MapCommon<MAP_IMPL>::boundaryMarkOrbit(Cell<ORBIT> c)
{ {
FunctorMark<MAP_IMPL> fm(*this, this->m_boundaryMarkers[DIM-2], this->m_markTables[DART][0]) ; this->template foreach_dart_of_orbit<ORBIT>(c.dart, [&] (Dart d)
this->template foreach_dart_of_orbit<ORBIT>(d, fm, 0) ; {
this->boundaryMark<DIM>(d);
});
} }
template <typename MAP_IMPL> template <typename MAP_IMPL>
template <unsigned int ORBIT, unsigned int DIM> template <unsigned int DIM, unsigned int ORBIT>
void MapCommon<MAP_IMPL>::boundaryUnmarkOrbit(Dart d) void MapCommon<MAP_IMPL>::boundaryUnmarkOrbit(Cell<ORBIT> c)
{ {
FunctorUnmark<MAP_IMPL> fm(*this, this->m_boundaryMarkers[DIM-2], this->m_markTables[DART][0]) ; this->template foreach_dart_of_orbit<ORBIT>(c.dart, [&] (Dart d)
this->template foreach_dart_of_orbit<ORBIT>(d, fm, 0) ; {
this->boundaryUnmark<DIM>(d);
});