From 3d54d512a7c254a1918c19a99b49c54bd41c07fe Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 21 May 2025 10:18:14 +0100 Subject: [PATCH] Triangulation: filter_iterator --- Triangulation/include/CGAL/Triangulation.h | 40 +++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/Triangulation/include/CGAL/Triangulation.h b/Triangulation/include/CGAL/Triangulation.h index 10d71f3b549..daae4054d64 100644 --- a/Triangulation/include/CGAL/Triangulation.h +++ b/Triangulation/include/CGAL/Triangulation.h @@ -30,6 +30,7 @@ #include #include #include +#include namespace CGAL { @@ -165,15 +166,25 @@ public: // Finite elements iterators class Finiteness_predicate; + class Infiniteness_predicate; typedef boost::filter_iterator Finite_vertex_iterator; typedef boost::filter_iterator Finite_vertex_const_iterator; +#if 0 typedef boost::filter_iterator Finite_full_cell_iterator; typedef boost::filter_iterator Finite_full_cell_const_iterator; +#else + + typedef CGAL::Filter_iterator + Finite_full_cell_iterator; + typedef CGAL::Filter_iterator + Finite_full_cell_const_iterator; +#endif + typedef boost::filter_iterator Finite_facet_iterator; @@ -437,15 +448,28 @@ public: Full_cell_const_iterator full_cells_begin() const { return tds().full_cells_begin(); } Full_cell_const_iterator full_cells_end() const { return tds().full_cells_end(); } - +#if 0 Finite_full_cell_iterator finite_full_cells_begin() { return Finite_full_cell_iterator(Finiteness_predicate(*this), full_cells_begin(), full_cells_end()); } Finite_full_cell_iterator finite_full_cells_end() { return Finite_full_cell_iterator(Finiteness_predicate(*this), full_cells_end(), full_cells_end()); } + Finite_full_cell_const_iterator finite_full_cells_begin() const { return Finite_full_cell_const_iterator(Finiteness_predicate(*this), full_cells_begin(), full_cells_end()); } Finite_full_cell_const_iterator finite_full_cells_end() const { return Finite_full_cell_const_iterator(Finiteness_predicate(*this), full_cells_end(), full_cells_end()); } +#else +/* +Finite_full_cell_iterator finite_full_cells_begin() + { return CGAL::filter_iterator(full_cells_end(), Infiniteness_predicate(*this), full_cells_begin()); } + Finite_full_cell_iterator finite_full_cells_end() + { return CGAL::filter_iterator(full_cells_end(), Finiteness_predicate(*this) ); } +*/ + Finite_full_cell_const_iterator finite_full_cells_begin() const + { return CGAL::filter_iterator(full_cells_end(), Infiniteness_predicate(*this), full_cells_begin()); } + Finite_full_cell_const_iterator finite_full_cells_end() const + { return CGAL::filter_iterator(full_cells_end(), Infiniteness_predicate(*this)); } +#endif Facet_iterator facets_begin() { return tds().facets_begin(); } Facet_iterator facets_end() { return tds().facets_end(); } @@ -468,6 +492,20 @@ public: } }; + class Infiniteness_predicate + { + const Self & t_; + public: + + Infiniteness_predicate(const Self & t) : t_(t) {} + template < class T > + bool operator()(const T & t) const + { + return t_.is_infinite(t); + } + }; + + class Point_equality_predicate { const Point & o_;