mirror of https://github.com/CGAL/cgal
Updated compact cell + bugfix when CGAL_LINKED_WITH_TBB is not defined
This commit is contained in:
parent
dac0e1c104
commit
ee0dfa30ab
|
|
@ -34,39 +34,27 @@
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
|
|
||||||
// Class Mesh_cell_base_3_base
|
// Class Mesh_cell_base_3_base
|
||||||
// Base for Compact_mesh_cell_base_3, with specialization for Parallel_tag
|
// Base for Compact_mesh_cell_base_3, with specializations
|
||||||
|
// for different walues of Parallel_tag and Use_erase_counter
|
||||||
|
template <bool Use_erase_counter, typename Concurrency_tag>
|
||||||
|
class Compact_mesh_cell_base_3_base;
|
||||||
|
|
||||||
// Sequential
|
// Class Mesh_cell_base_3_base
|
||||||
|
// Specialization for sequential - no erase counter
|
||||||
template <typename Concurrency_tag>
|
template <typename Concurrency_tag>
|
||||||
class Compact_mesh_cell_base_3_base
|
class Compact_mesh_cell_base_3_base<false, Concurrency_tag>
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
Compact_mesh_cell_base_3_base()
|
Compact_mesh_cell_base_3_base()
|
||||||
: bits_(0) {}
|
: bits_(0) {}
|
||||||
|
|
||||||
#if defined(CGAL_MESH_3_USE_LAZY_SORTED_REFINEMENT_QUEUE)\
|
|
||||||
|| defined(CGAL_MESH_3_USE_LAZY_UNSORTED_REFINEMENT_QUEUE)
|
|
||||||
public:
|
public:
|
||||||
// Erase counter (cf. Compact_container)
|
// Erase counter (cf. Compact_container)
|
||||||
unsigned int get_erase_counter() const
|
// Dummy functions
|
||||||
{
|
unsigned int get_erase_counter() const { return 0; }
|
||||||
return this->m_erase_counter;
|
void set_erase_counter(unsigned int c) {}
|
||||||
}
|
void increment_erase_counter() {}
|
||||||
void set_erase_counter(unsigned int c)
|
|
||||||
{
|
|
||||||
this->m_erase_counter = c;
|
|
||||||
}
|
|
||||||
void increment_erase_counter()
|
|
||||||
{
|
|
||||||
++this->m_erase_counter;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
typedef unsigned int Erase_counter_type;
|
|
||||||
Erase_counter_type m_erase_counter;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
public:
|
|
||||||
/// Marks \c facet as visited
|
/// Marks \c facet as visited
|
||||||
void set_facet_visited (const int facet)
|
void set_facet_visited (const int facet)
|
||||||
{
|
{
|
||||||
|
|
@ -92,10 +80,67 @@ private:
|
||||||
char bits_;
|
char bits_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Class Mesh_cell_base_3_base
|
||||||
|
// Specialization for sequential - WITH erase counter
|
||||||
|
template <typename Concurrency_tag>
|
||||||
|
class Compact_mesh_cell_base_3_base<true, Concurrency_tag>
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
Compact_mesh_cell_base_3_base()
|
||||||
|
: bits_(0) {}
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Erase counter (cf. Compact_container)
|
||||||
|
unsigned int get_erase_counter() const
|
||||||
|
{
|
||||||
|
return this->m_erase_counter;
|
||||||
|
}
|
||||||
|
void set_erase_counter(unsigned int c)
|
||||||
|
{
|
||||||
|
this->m_erase_counter = c;
|
||||||
|
}
|
||||||
|
void increment_erase_counter()
|
||||||
|
{
|
||||||
|
++this->m_erase_counter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Marks \c facet as visited
|
||||||
|
void set_facet_visited (const int facet)
|
||||||
|
{
|
||||||
|
CGAL_precondition(facet>=0 && facet <4);
|
||||||
|
bits_ |= (1 << facet);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Marks \c facet as not visited
|
||||||
|
void reset_visited (const int facet)
|
||||||
|
{
|
||||||
|
CGAL_precondition(facet>=0 && facet<4);
|
||||||
|
bits_ &= (15 & ~(1 << facet));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns \c true if \c facet is marked as visited
|
||||||
|
bool is_facet_visited (const int facet) const
|
||||||
|
{
|
||||||
|
CGAL_precondition(facet>=0 && facet<4);
|
||||||
|
return ( (bits_ & (1 << facet)) != 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
typedef unsigned int Erase_counter_type;
|
||||||
|
Erase_counter_type m_erase_counter;
|
||||||
|
/// Stores visited facets (4 first bits)
|
||||||
|
char bits_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef CGAL_LINKED_WITH_TBB
|
#ifdef CGAL_LINKED_WITH_TBB
|
||||||
// Specialized version (Parallel)
|
// Class Mesh_cell_base_3_base
|
||||||
|
// Specialization for parallel - WITH erase counter
|
||||||
template <>
|
template <>
|
||||||
class Compact_mesh_cell_base_3_base<Parallel_tag>
|
class Compact_mesh_cell_base_3_base<true, Parallel_tag>
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
Compact_mesh_cell_base_3_base()
|
Compact_mesh_cell_base_3_base()
|
||||||
|
|
@ -147,27 +192,27 @@ public:
|
||||||
return ( (bits_ & (1 << facet)) != 0 );
|
return ( (bits_ & (1 << facet)) != 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
|
||||||
typedef tbb::atomic<unsigned int> Erase_counter_type;
|
|
||||||
|
|
||||||
Erase_counter_type m_erase_counter;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
typedef tbb::atomic<unsigned int> Erase_counter_type;
|
||||||
|
Erase_counter_type m_erase_counter;
|
||||||
/// Stores visited facets (4 first bits)
|
/// Stores visited facets (4 first bits)
|
||||||
tbb::atomic<char> bits_;
|
tbb::atomic<char> bits_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CGAL_LINKED_WITH_TBB
|
#endif // CGAL_LINKED_WITH_TBB
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Class Mesh_cell_base_3
|
// Class Mesh_cell_base_3
|
||||||
// Cell base class used in 3D meshing process.
|
// Cell base class used in 3D meshing process.
|
||||||
// Adds information to Cb about the cell of the input complex containing it
|
// Adds information to Cb about the cell of the input complex containing it
|
||||||
template< class GT,
|
template< class GT,
|
||||||
class MD,
|
class MD,
|
||||||
typename Concurrency_tag = Sequential_tag,
|
|
||||||
class TDS = void >
|
class TDS = void >
|
||||||
class Compact_mesh_cell_base_3
|
class Compact_mesh_cell_base_3
|
||||||
: public Compact_mesh_cell_base_3_base<Concurrency_tag>
|
: public Compact_mesh_cell_base_3_base<
|
||||||
|
TDS::Cell_container_strategy::Uses_erase_counter,
|
||||||
|
typename TDS::Concurrency_tag>
|
||||||
{
|
{
|
||||||
typedef typename GT::FT FT;
|
typedef typename GT::FT FT;
|
||||||
|
|
||||||
|
|
@ -182,7 +227,7 @@ public:
|
||||||
|
|
||||||
template <typename TDS2>
|
template <typename TDS2>
|
||||||
struct Rebind_TDS {
|
struct Rebind_TDS {
|
||||||
typedef Compact_mesh_cell_base_3<GT, MD, Concurrency_tag, TDS2> Other;
|
typedef Compact_mesh_cell_base_3<GT, MD, TDS2> Other;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -598,12 +643,12 @@ private:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template < class GT, class MT, class CT, class Cb >
|
template < class GT, class MT, class Cb >
|
||||||
std::istream&
|
std::istream&
|
||||||
operator>>(std::istream &is,
|
operator>>(std::istream &is,
|
||||||
Compact_mesh_cell_base_3<GT, MT, CT, Cb> &c)
|
Compact_mesh_cell_base_3<GT, MT, Cb> &c)
|
||||||
{
|
{
|
||||||
typename Compact_mesh_cell_base_3<GT, MT, CT, Cb>::Subdomain_index index;
|
typename Compact_mesh_cell_base_3<GT, MT, Cb>::Subdomain_index index;
|
||||||
if(is_ascii(is))
|
if(is_ascii(is))
|
||||||
is >> index;
|
is >> index;
|
||||||
else
|
else
|
||||||
|
|
@ -612,7 +657,7 @@ operator>>(std::istream &is,
|
||||||
c.set_subdomain_index(index);
|
c.set_subdomain_index(index);
|
||||||
for(int i = 0; i < 4; ++i)
|
for(int i = 0; i < 4; ++i)
|
||||||
{
|
{
|
||||||
typename Compact_mesh_cell_base_3<GT, MT, CT, Cb>::Surface_patch_index i2;
|
typename Compact_mesh_cell_base_3<GT, MT, Cb>::Surface_patch_index i2;
|
||||||
if(is_ascii(is))
|
if(is_ascii(is))
|
||||||
is >> i2;
|
is >> i2;
|
||||||
else
|
else
|
||||||
|
|
@ -625,10 +670,10 @@ operator>>(std::istream &is,
|
||||||
return is;
|
return is;
|
||||||
}
|
}
|
||||||
|
|
||||||
template < class GT, class MT, class CT, class Cb >
|
template < class GT, class MT, class Cb >
|
||||||
std::ostream&
|
std::ostream&
|
||||||
operator<<(std::ostream &os,
|
operator<<(std::ostream &os,
|
||||||
const Compact_mesh_cell_base_3<GT, MT, CT, Cb> &c)
|
const Compact_mesh_cell_base_3<GT, MT, Cb> &c)
|
||||||
{
|
{
|
||||||
if(is_ascii(os))
|
if(is_ascii(os))
|
||||||
os << c.subdomain_index();
|
os << c.subdomain_index();
|
||||||
|
|
@ -646,15 +691,15 @@ operator<<(std::ostream &os,
|
||||||
|
|
||||||
|
|
||||||
// Specialization for void.
|
// Specialization for void.
|
||||||
template <typename GT, typename MD, typename CT>
|
template <typename GT, typename MD>
|
||||||
class Compact_mesh_cell_base_3<GT, MD, CT, void>
|
class Compact_mesh_cell_base_3<GT, MD, void>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef internal::Dummy_tds_3 Triangulation_data_structure;
|
typedef internal::Dummy_tds_3 Triangulation_data_structure;
|
||||||
typedef Triangulation_data_structure::Vertex_handle Vertex_handle;
|
typedef Triangulation_data_structure::Vertex_handle Vertex_handle;
|
||||||
typedef Triangulation_data_structure::Cell_handle Cell_handle;
|
typedef Triangulation_data_structure::Cell_handle Cell_handle;
|
||||||
template <typename TDS2>
|
template <typename TDS2>
|
||||||
struct Rebind_TDS { typedef Compact_mesh_cell_base_3<GT, MD, CT, TDS2> Other; };
|
struct Rebind_TDS { typedef Compact_mesh_cell_base_3<GT, MD, TDS2> Other; };
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace CGAL
|
} // end namespace CGAL
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,6 @@
|
||||||
#include <CGAL/Mesh_vertex_base_3.h>
|
#include <CGAL/Mesh_vertex_base_3.h>
|
||||||
#include <CGAL/Mesh_cell_base_3.h>
|
#include <CGAL/Mesh_cell_base_3.h>
|
||||||
|
|
||||||
#include <CGAL/Spatial_grid_lock_data_structure_3.h>
|
|
||||||
|
|
||||||
#ifdef CGAL_COMPACT_MESH_VERTEX_CELL
|
#ifdef CGAL_COMPACT_MESH_VERTEX_CELL
|
||||||
#include <CGAL/Compact_mesh_vertex_base_3.h>
|
#include <CGAL/Compact_mesh_vertex_base_3.h>
|
||||||
#include <CGAL/Compact_mesh_cell_base_3.h>
|
#include <CGAL/Compact_mesh_cell_base_3.h>
|
||||||
|
|
@ -102,7 +100,7 @@ private:
|
||||||
|
|
||||||
# ifdef CGAL_COMPACT_MESH_VERTEX_CELL
|
# ifdef CGAL_COMPACT_MESH_VERTEX_CELL
|
||||||
typedef Compact_mesh_vertex_base_3<Geom_traits, MD> Vertex_base;
|
typedef Compact_mesh_vertex_base_3<Geom_traits, MD> Vertex_base;
|
||||||
typedef Compact_mesh_cell_base_3<Geom_traits,MD,Parallel_tag> Cell_base;
|
typedef Compact_mesh_cell_base_3<Geom_traits,MD> Cell_base;
|
||||||
# else // NOT CGAL_COMPACT_MESH_VERTEX_CELL
|
# else // NOT CGAL_COMPACT_MESH_VERTEX_CELL
|
||||||
typedef Mesh_vertex_base_3<Geom_traits, MD> Vertex_base;
|
typedef Mesh_vertex_base_3<Geom_traits, MD> Vertex_base;
|
||||||
typedef Mesh_cell_base_3<Geom_traits, MD> Cell_base;
|
typedef Mesh_cell_base_3<Geom_traits, MD> Cell_base;
|
||||||
|
|
@ -113,10 +111,7 @@ private:
|
||||||
Compact_container_strategy_with_counter,
|
Compact_container_strategy_with_counter,
|
||||||
Compact_container_strategy_with_counter,
|
Compact_container_strategy_with_counter,
|
||||||
Parallel_tag> Tds;
|
Parallel_tag> Tds;
|
||||||
typedef Regular_triangulation_3<
|
typedef Regular_triangulation_3<Geom_traits, Tds> Triangulation;
|
||||||
Geom_traits, Tds,
|
|
||||||
Spatial_grid_lock_data_structure_3<
|
|
||||||
Tag_priority_blocking_with_atomics> > Triangulation;
|
|
||||||
|
|
||||||
#else // !CGAL_LINKED_WITH_TBB
|
#else // !CGAL_LINKED_WITH_TBB
|
||||||
|
|
||||||
|
|
@ -128,9 +123,17 @@ private:
|
||||||
typedef Mesh_cell_base_3<Geom_traits, MD> Cell_base;
|
typedef Mesh_cell_base_3<Geom_traits, MD> Cell_base;
|
||||||
# endif // NOT CGAL_COMPACT_MESH_VERTEX_CELL
|
# endif // NOT CGAL_COMPACT_MESH_VERTEX_CELL
|
||||||
|
|
||||||
|
# if defined(CGAL_MESH_3_USE_LAZY_SORTED_REFINEMENT_QUEUE)\
|
||||||
|
|| defined(CGAL_MESH_3_USE_LAZY_UNSORTED_REFINEMENT_QUEUE)
|
||||||
typedef Triangulation_data_structure_3<
|
typedef Triangulation_data_structure_3<
|
||||||
Vertex_base, Cell_base> Tds;
|
Vertex_base, Cell_base,
|
||||||
|
Compact_container_strategy_with_counter,
|
||||||
|
Compact_container_strategy_with_counter> Tds;
|
||||||
|
# else
|
||||||
|
typedef Triangulation_data_structure_3<Vertex_base,Cell_base> Tds;
|
||||||
|
# endif
|
||||||
typedef Regular_triangulation_3<Geom_traits, Tds> Triangulation;
|
typedef Regular_triangulation_3<Geom_traits, Tds> Triangulation;
|
||||||
|
|
||||||
#endif // CGAL_LINKED_WITH_TBB
|
#endif // CGAL_LINKED_WITH_TBB
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,11 @@
|
||||||
# ifndef CGAL_CONCURRENT_PROFILE
|
# ifndef CGAL_CONCURRENT_PROFILE
|
||||||
# define CGAL_CONCURRENT_PROFILE
|
# define CGAL_CONCURRENT_PROFILE
|
||||||
# endif
|
# endif
|
||||||
|
#else
|
||||||
|
// Automatically UNdefine CGAL_CONCURRENT_PROFILE if we're NOT linked with TBB
|
||||||
|
# ifdef CGAL_CONCURRENT_PROFILE
|
||||||
|
# undef CGAL_CONCURRENT_PROFILE
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CGAL_CONCURRENT_PROFILE
|
#ifdef CGAL_CONCURRENT_PROFILE
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue