Commit 12e07242 authored by untereiner's avatar untereiner

Merge branch 'develop' of cgogn:~kraemer/CGoGN into develop

parents fc9bfe3a 950f5e11
...@@ -115,11 +115,12 @@ typename V_ATT::DATA_TYPE vertexBorderNormal(typename PFP::MAP& map, Vertex v, c ...@@ -115,11 +115,12 @@ typename V_ATT::DATA_TYPE vertexBorderNormal(typename PFP::MAP& map, Vertex v, c
typedef typename V_ATT::DATA_TYPE VEC3 ; typedef typename V_ATT::DATA_TYPE VEC3 ;
VEC3 N(0) ; VEC3 N(0) ;
std::vector<Dart> faces; std::vector<Dart> faces;
CellMarker<typename PFP::MAP, FACE> f(map); faces.reserve(16);
map.foreach_dart_of_vertex(v, [&] (Dart d) { faces.push_back(d); });
FunctorStore fs(faces); CellMarker<typename PFP::MAP, FACE> f(map);
map.foreach_dart_of_vertex(v, fs);
for(std::vector<Dart>::iterator it = faces.begin() ; it != faces.end() ; ++it) for(std::vector<Dart>::iterator it = faces.begin() ; it != faces.end() ; ++it)
{ {
......
...@@ -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);
} }
/*************************************************** /***************************************************
......
This diff is collapsed.
...@@ -1635,7 +1635,10 @@ bool OBJModel<PFP>::import( const std::string& filename, std::vector<std::string ...@@ -1635,7 +1635,10 @@ bool OBJModel<PFP>::import( const std::string& filename, std::vector<std::string
std::vector<unsigned int> localIndices; std::vector<unsigned int> localIndices;
localIndices.reserve(64*3); localIndices.reserve(64*3);
FunctorInitEmb<typename PFP::MAP, VERTEX> fsetemb(m_map);
unsigned int vemb = EMBNULL;
auto fsetemb = [&] (Dart d) { m_map.template initDartEmbedding<VERTEX>(d, vemb); };
// FunctorInitEmb<typename PFP::MAP, VERTEX> fsetemb(m_map);
VertexAutoAttribute< NoTypeNameAttribute< std::vector<Dart> >, MAP_IMPL> vecDartsPerVertex(m_map, "incidents"); VertexAutoAttribute< NoTypeNameAttribute< std::vector<Dart> >, MAP_IMPL> vecDartsPerVertex(m_map, "incidents");
VertexAutoAttribute< NoTypeNameAttribute< std::vector<unsigned int> >, MAP_IMPL> vecNormIndPerVertex(m_map, "incidentsN"); VertexAutoAttribute< NoTypeNameAttribute< std::vector<unsigned int> >, MAP_IMPL> vecNormIndPerVertex(m_map, "incidentsN");
...@@ -1739,13 +1742,12 @@ bool OBJModel<PFP>::import( const std::string& filename, std::vector<std::string ...@@ -1739,13 +1742,12 @@ bool OBJModel<PFP>::import( const std::string& filename, std::vector<std::string
for (short j = 0; j < nbe; ++j) for (short j = 0; j < nbe; ++j)
{ {
unsigned int em = localIndices[3*j]-1; // get embedding vemb = localIndices[3*j]-1; // get embedding
fsetemb.changeEmb(em) ;
m_map.template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb); m_map.template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb);
mk.mark(d) ; // mark on the fly to unmark on second loop mk.mark(d) ; // mark on the fly to unmark on second loop
vecDartsPerVertex[em].push_back(d); // store incident darts for fast adjacency reconstruction vecDartsPerVertex[vemb].push_back(d); // store incident darts for fast adjacency reconstruction
vecTCIndPerVertex[em].push_back(localIndices[3*j+1]-1); vecTCIndPerVertex[vemb].push_back(localIndices[3*j+1]-1);
vecNormIndPerVertex[em].push_back(localIndices[3*j+2]-1); vecNormIndPerVertex[vemb].push_back(localIndices[3*j+2]-1);
d = m_map.phi1(d); d = m_map.phi1(d);
} }
} }
......
...@@ -118,14 +118,17 @@ template< typename DataType, template < typename D2 > class Windowing, typename ...@@ -118,14 +118,17 @@ template< typename DataType, template < typename D2 > class Windowing, typename
Dart MarchingCube<DataType, Windowing, PFP>::createTriEmb(unsigned int e1, unsigned int e2, unsigned int e3) Dart MarchingCube<DataType, Windowing, PFP>::createTriEmb(unsigned int e1, unsigned int e2, unsigned int e3)
{ {
L_DART d = m_map->newFace(3,false); L_DART d = m_map->newFace(3,false);
FunctorSetEmb<typename PFP::MAP, VERTEX> fsetemb(*m_map, e1); unsigned int vemb = e1;
auto fsetemb = [&] (Dart d) { m_map->template setDartEmbedding<VERTEX>(d, vemb); };
m_map->template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb); m_map->template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb);
d = m_map->phi1(d); d = m_map->phi1(d);
fsetemb.changeEmb(e2); vemb = e2;
m_map->template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb); m_map->template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb);
d = m_map->phi1(d); d = m_map->phi1(d);
fsetemb.changeEmb(e3); vemb = e3;
m_map->template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb); m_map->template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb);
d = m_map->phi1(d); d = m_map->phi1(d);
...@@ -136,7 +139,7 @@ template< typename DataType, template < typename D2 > class Windowing, typename ...@@ -136,7 +139,7 @@ template< typename DataType, template < typename D2 > class Windowing, typename
void MarchingCube<DataType, Windowing, PFP>::simpleMeshing() void MarchingCube<DataType, Windowing, PFP>::simpleMeshing()
{ {
// create the mesh if needed // create the mesh if needed
if (m_map==NULL) if (m_map == NULL)
{ {
m_map = new L_MAP(); m_map = new L_MAP();
} }
......
...@@ -267,39 +267,39 @@ public: ...@@ -267,39 +267,39 @@ public:
// Embedding Functors // Embedding Functors
/********************************************************/ /********************************************************/
template <typename MAP, unsigned int ORBIT> //template <typename MAP, unsigned int ORBIT>
class FunctorSetEmb : public FunctorMap<MAP> //class FunctorSetEmb : public FunctorMap<MAP>
{ //{
protected: //protected:
unsigned int emb; // unsigned int emb;
public: //public:
FunctorSetEmb(MAP& map, unsigned int e) : FunctorMap<MAP>(map), emb(e) // FunctorSetEmb(MAP& map, unsigned int e) : FunctorMap<MAP>(map), emb(e)
{} // {}
bool operator()(Dart d) // bool operator()(Dart d)
{ // {
this->m_map.template setDartEmbedding<ORBIT>(d, emb); // this->m_map.template setDartEmbedding<ORBIT>(d, emb);
return false; // return false;
} // }
void changeEmb(unsigned int e) { emb = e; } // void changeEmb(unsigned int e) { emb = e; }
}; //};
template <typename MAP, unsigned int ORBIT> //template <typename MAP, unsigned int ORBIT>
class FunctorInitEmb : public FunctorMap<MAP> //class FunctorInitEmb : public FunctorMap<MAP>
{ //{
protected: //protected:
unsigned int emb; // unsigned int emb;
public: //public:
FunctorInitEmb(MAP& map) : FunctorMap<MAP>(map), emb(EMBNULL) // FunctorInitEmb(MAP& map) : FunctorMap<MAP>(map), emb(EMBNULL)
{} // {}
FunctorInitEmb(MAP& map, unsigned int e) : FunctorMap<MAP>(map), emb(e) // FunctorInitEmb(MAP& map, unsigned int e) : FunctorMap<MAP>(map), emb(e)
{} // {}
bool operator()(Dart d) // bool operator()(Dart d)
{ // {
this->m_map.template initDartEmbedding<ORBIT>(d, emb); // this->m_map.template initDartEmbedding<ORBIT>(d, emb);
return false; // return false;
} // }
void changeEmb(unsigned int e) { emb = e; } // void changeEmb(unsigned int e) { emb = e; }
}; //};
// Search Functor: look for a given dart when applied // Search Functor: look for a given dart when applied
/********************************************************/ /********************************************************/
...@@ -332,18 +332,18 @@ public: ...@@ -332,18 +332,18 @@ public:
// Functor Store: to store the traversed darts in a given vector // Functor Store: to store the traversed darts in a given vector
/********************************************************/ /********************************************************/
class FunctorStore : public FunctorType //class FunctorStore : public FunctorType
{ //{
protected: //protected:
std::vector<Dart>& m_vec; // std::vector<Dart>& m_vec;
public: //public:
FunctorStore(std::vector<Dart>& vec) : m_vec(vec) {} // FunctorStore(std::vector<Dart>& vec) : m_vec(vec) {}
bool operator()(Dart d) // bool operator()(Dart d)
{ // {
m_vec.push_back(d); // m_vec.push_back(d);
return false; // return false;
} // }
}; //};
template <typename MAP> template <typename MAP>
......
...@@ -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>