STL_extension: Add parameter for value type to Prevent_deref

This commit is contained in:
Andreas Fabri 2023-04-26 10:55:59 +01:00
parent b3c2bac164
commit 68261eb0f1
6 changed files with 36 additions and 27 deletions

View File

@ -37,19 +37,23 @@
namespace CGAL {
template<typename I>
template<typename I, typename VT = I>
class Prevent_deref
: public boost::iterator_adaptor<
Prevent_deref<I>
Prevent_deref<I,VT>
, I // base
, I // value
, VT // value
, boost::use_default
, VT // ref
>
{
public:
typedef boost::iterator_adaptor<
Prevent_deref<I>
Prevent_deref<I,VT>
, I // base
, I // value
, VT // value
, boost::use_default
, VT // ref
> Base;
typedef typename Base::reference reference;
typedef typename std::pair<I, I> 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<typename boost::remove_reference<reference>::type&>(this->base_reference()); }
reference dereference() const {
return this->base_reference();
}
};
template<typename I>
Iterator_range<Prevent_deref<I> > make_prevent_deref_range(const Iterator_range<I>& range)
{

View File

@ -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 {

View File

@ -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

View File

@ -183,7 +183,7 @@ public:
operator Vertex_handle() const { return Base::base(); }
};
typedef Iterator_range<Prevent_deref<Finite_vertices_iterator> > Finite_vertex_handles;
typedef Iterator_range<Prevent_deref<Finite_vertices_iterator, Vertex_handle> > Finite_vertex_handles;
class Hidden_vertices_iterator :
public Filter_iterator<Finite_vib, Unhidden_tester>
@ -200,7 +200,7 @@ public:
operator Vertex_handle() const { return Base::base(); }
};
typedef Iterator_range<Prevent_deref<Hidden_vertices_iterator> > Hidden_vertex_handles;
typedef Iterator_range<Prevent_deref<Hidden_vertices_iterator,Vertex_handle> > Hidden_vertex_handles;
//for backward compatibility
typedef Finite_faces_iterator Face_iterator;
@ -2236,7 +2236,7 @@ typename Regular_triangulation_2<Gt,Tds>::Finite_vertex_handles
Regular_triangulation_2<Gt,Tds>::
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<Gt,Tds>::Hidden_vertex_handles
Regular_triangulation_2<Gt,Tds>::
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 >

View File

@ -213,8 +213,8 @@ public:
typedef typename Tds::Vertex_handles All_vertex_handles;
typedef typename Tds::Edges All_edges;
typedef Iterator_range<Prevent_deref<Finite_faces_iterator> > Finite_face_handles;
typedef Iterator_range<Prevent_deref<Finite_vertices_iterator> > Finite_vertex_handles;
typedef Iterator_range<Prevent_deref<Finite_faces_iterator, Face_handle> > Finite_face_handles;
typedef Iterator_range<Prevent_deref<Finite_vertices_iterator, Vertex_handle> > Finite_vertex_handles;
typedef Iterator_range<Finite_edges_iterator> Finite_edges;
typedef Iterator_range<Point_iterator> Points;
@ -3206,7 +3206,7 @@ typename Triangulation_2<Gt, Tds>::Finite_face_handles
Triangulation_2<Gt, Tds>::
finite_face_handles() const
{
return make_prevent_deref_range(finite_faces_begin(),finite_faces_end());
return { finite_faces_begin(),finite_faces_end() };
}
template <class Gt, class Tds >
@ -3235,7 +3235,7 @@ typename Triangulation_2<Gt, Tds>::Finite_vertex_handles
Triangulation_2<Gt, Tds>::
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 >

View File

@ -517,8 +517,8 @@ public:
operator Vertex_handle() const { return Base::base(); }
};
typedef Iterator_range<Prevent_deref<Finite_cells_iterator> > Finite_cell_handles;
typedef Iterator_range<Prevent_deref<Finite_vertices_iterator> > Finite_vertex_handles;
typedef Iterator_range<Prevent_deref<Finite_cells_iterator, Cell_handle> > Finite_cell_handles;
typedef Iterator_range<Prevent_deref<Finite_vertices_iterator,Vertex_handle> > Finite_vertex_handles;
typedef Filter_iterator<Edge_iterator, Infinite_tester> Finite_edges_iterator;
typedef Filter_iterator<Facet_iterator, Infinite_tester> Finite_facets_iterator;
@ -529,7 +529,7 @@ public:
typedef Triangulation_segment_cell_iterator_3<Self> Segment_cell_iterator;
typedef Triangulation_segment_simplex_iterator_3<Self> Segment_simplex_iterator;
typedef Iterator_range<Prevent_deref<Segment_cell_iterator> > Segment_traverser_cell_handles;
typedef Iterator_range<Prevent_deref<Segment_cell_iterator, Cell_handle> > Segment_traverser_cell_handles;
typedef Iterator_range<Segment_simplex_iterator> 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