diff --git a/STL_Extension/include/CGAL/iterator.h b/STL_Extension/include/CGAL/iterator.h index ea9a964c8a3..8d4bc009747 100644 --- a/STL_Extension/include/CGAL/iterator.h +++ b/STL_Extension/include/CGAL/iterator.h @@ -37,19 +37,23 @@ namespace CGAL { -template + template class Prevent_deref : public boost::iterator_adaptor< - Prevent_deref + Prevent_deref , I // base - , I // value + , VT // value + , boost::use_default + , VT // ref > { public: typedef boost::iterator_adaptor< - Prevent_deref + Prevent_deref , I // base - , I // value + , VT // value + , boost::use_default + , VT // ref > Base; typedef typename Base::reference reference; typedef typename std::pair range; @@ -58,9 +62,16 @@ public: Prevent_deref(const I& i) : Base(i) {} private: friend class boost::iterator_core_access; - reference dereference() const { return const_cast::type&>(this->base_reference()); } + reference dereference() const { + return this->base_reference(); + } }; + + + + + template Iterator_range > make_prevent_deref_range(const Iterator_range& range) { diff --git a/TDS_2/include/CGAL/Triangulation_data_structure_2.h b/TDS_2/include/CGAL/Triangulation_data_structure_2.h index 322e6cef1b8..aff81d0302c 100644 --- a/TDS_2/include/CGAL/Triangulation_data_structure_2.h +++ b/TDS_2/include/CGAL/Triangulation_data_structure_2.h @@ -183,7 +183,7 @@ public: } Face_handles face_handles() const { - return make_prevent_deref_range(faces_begin(),faces_end()); + return { faces_begin(),faces_end() }; } Vertex_iterator vertices_begin() const { @@ -195,7 +195,7 @@ public: } Vertex_handles vertex_handles() const { - return make_prevent_deref_range(vertices_begin(),vertices_end()); + return { vertices_begin(),vertices_end() }; } Edge_iterator edges_begin() const { diff --git a/TDS_3/include/CGAL/Triangulation_data_structure_3.h b/TDS_3/include/CGAL/Triangulation_data_structure_3.h index 6333387f28b..ab4806a9abc 100644 --- a/TDS_3/include/CGAL/Triangulation_data_structure_3.h +++ b/TDS_3/include/CGAL/Triangulation_data_structure_3.h @@ -661,7 +661,7 @@ public: Cell_handles cell_handles() const { - return make_prevent_deref_range(cells_begin(), cells_end()); + return {cells_begin(), cells_end()}; } Cell_iterator raw_cells_begin() const @@ -720,7 +720,7 @@ public: Vertex_handles vertex_handles() const { - return make_prevent_deref_range(vertices_begin(), vertices_end()); + return {vertices_begin(), vertices_end()}; } // CIRCULATOR METHODS diff --git a/Triangulation_2/include/CGAL/Regular_triangulation_2.h b/Triangulation_2/include/CGAL/Regular_triangulation_2.h index 145b387263f..553f6b50285 100644 --- a/Triangulation_2/include/CGAL/Regular_triangulation_2.h +++ b/Triangulation_2/include/CGAL/Regular_triangulation_2.h @@ -183,7 +183,7 @@ public: operator Vertex_handle() const { return Base::base(); } }; - typedef Iterator_range > Finite_vertex_handles; + typedef Iterator_range > Finite_vertex_handles; class Hidden_vertices_iterator : public Filter_iterator @@ -200,7 +200,7 @@ public: operator Vertex_handle() const { return Base::base(); } }; - typedef Iterator_range > Hidden_vertex_handles; + typedef Iterator_range > Hidden_vertex_handles; //for backward compatibility typedef Finite_faces_iterator Face_iterator; @@ -2236,7 +2236,7 @@ typename Regular_triangulation_2::Finite_vertex_handles Regular_triangulation_2:: finite_vertex_handles() const { - return make_prevent_deref_range(finite_vertices_begin(),finite_vertices_end()); + return { finite_vertices_begin(),finite_vertices_end() }; } template < class Gt, class Tds > @@ -2263,7 +2263,7 @@ typename Regular_triangulation_2::Hidden_vertex_handles Regular_triangulation_2:: hidden_vertex_handles() const { - return make_prevent_deref_range(hidden_vertices_begin(),hidden_vertices_end()); + return { hidden_vertices_begin(),hidden_vertices_end() }; } template < class Gt, class Tds > diff --git a/Triangulation_2/include/CGAL/Triangulation_2.h b/Triangulation_2/include/CGAL/Triangulation_2.h index 6b1de4b4f19..26d6006820e 100644 --- a/Triangulation_2/include/CGAL/Triangulation_2.h +++ b/Triangulation_2/include/CGAL/Triangulation_2.h @@ -213,8 +213,8 @@ public: typedef typename Tds::Vertex_handles All_vertex_handles; typedef typename Tds::Edges All_edges; - typedef Iterator_range > Finite_face_handles; - typedef Iterator_range > Finite_vertex_handles; + typedef Iterator_range > Finite_face_handles; + typedef Iterator_range > Finite_vertex_handles; typedef Iterator_range Finite_edges; typedef Iterator_range Points; @@ -3206,7 +3206,7 @@ typename Triangulation_2::Finite_face_handles Triangulation_2:: finite_face_handles() const { - return make_prevent_deref_range(finite_faces_begin(),finite_faces_end()); + return { finite_faces_begin(),finite_faces_end() }; } template @@ -3235,7 +3235,7 @@ typename Triangulation_2::Finite_vertex_handles Triangulation_2:: finite_vertex_handles() const { - return make_prevent_deref_range(finite_vertices_begin(),finite_vertices_end()); + return { finite_vertices_begin(),finite_vertices_end() }; } template diff --git a/Triangulation_3/include/CGAL/Triangulation_3.h b/Triangulation_3/include/CGAL/Triangulation_3.h index cbad6e03183..86102bacc56 100644 --- a/Triangulation_3/include/CGAL/Triangulation_3.h +++ b/Triangulation_3/include/CGAL/Triangulation_3.h @@ -517,8 +517,8 @@ public: operator Vertex_handle() const { return Base::base(); } }; - typedef Iterator_range > Finite_cell_handles; - typedef Iterator_range > Finite_vertex_handles; + typedef Iterator_range > Finite_cell_handles; + typedef Iterator_range > Finite_vertex_handles; typedef Filter_iterator Finite_edges_iterator; typedef Filter_iterator Finite_facets_iterator; @@ -529,7 +529,7 @@ public: typedef Triangulation_segment_cell_iterator_3 Segment_cell_iterator; typedef Triangulation_segment_simplex_iterator_3 Segment_simplex_iterator; - typedef Iterator_range > Segment_traverser_cell_handles; + typedef Iterator_range > Segment_traverser_cell_handles; typedef Iterator_range Segment_traverser_simplices; private: @@ -1803,7 +1803,7 @@ public: Finite_cell_handles finite_cell_handles() const { - return make_prevent_deref_range(finite_cells_begin(), finite_cells_end()); + return {finite_cells_begin(), finite_cells_end()}; } @@ -1833,7 +1833,7 @@ public: Finite_vertex_handles finite_vertex_handles() const { - return make_prevent_deref_range(finite_vertices_begin(), finite_vertices_end()); + return { finite_vertices_begin(), finite_vertices_end()}; } Vertex_iterator vertices_begin() const { return _tds.vertices_begin(); } @@ -2245,15 +2245,13 @@ public: Segment_traverser_cell_handles segment_traverser_cell_handles(Vertex_handle vs, Vertex_handle vt) const { - return make_prevent_deref_range(segment_traverser_cells_begin(vs, vt), - segment_traverser_cells_end()); + return {segment_traverser_cells_begin(vs, vt),segment_traverser_cells_end()}; } Segment_traverser_cell_handles segment_traverser_cell_handles(const Point& ps, const Point& pt, Cell_handle hint = Cell_handle()) const { - return make_prevent_deref_range(segment_traverser_cells_begin(ps, pt, hint), - segment_traverser_cells_end()); + return { segment_traverser_cells_begin(ps, pt, hint), segment_traverser_cells_end()}; } //// Segment Simplex Iterator