mirror of https://github.com/CGAL/cgal
STL_extension: Add parameter for value type to Prevent_deref
This commit is contained in:
parent
b3c2bac164
commit
68261eb0f1
|
|
@ -37,19 +37,23 @@
|
||||||
|
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
|
|
||||||
template<typename I>
|
template<typename I, typename VT = I>
|
||||||
class Prevent_deref
|
class Prevent_deref
|
||||||
: public boost::iterator_adaptor<
|
: public boost::iterator_adaptor<
|
||||||
Prevent_deref<I>
|
Prevent_deref<I,VT>
|
||||||
, I // base
|
, I // base
|
||||||
, I // value
|
, VT // value
|
||||||
|
, boost::use_default
|
||||||
|
, VT // ref
|
||||||
>
|
>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef boost::iterator_adaptor<
|
typedef boost::iterator_adaptor<
|
||||||
Prevent_deref<I>
|
Prevent_deref<I,VT>
|
||||||
, I // base
|
, I // base
|
||||||
, I // value
|
, VT // value
|
||||||
|
, boost::use_default
|
||||||
|
, VT // ref
|
||||||
> Base;
|
> Base;
|
||||||
typedef typename Base::reference reference;
|
typedef typename Base::reference reference;
|
||||||
typedef typename std::pair<I, I> range;
|
typedef typename std::pair<I, I> range;
|
||||||
|
|
@ -58,9 +62,16 @@ public:
|
||||||
Prevent_deref(const I& i) : Base(i) {}
|
Prevent_deref(const I& i) : Base(i) {}
|
||||||
private:
|
private:
|
||||||
friend class boost::iterator_core_access;
|
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>
|
template<typename I>
|
||||||
Iterator_range<Prevent_deref<I> > make_prevent_deref_range(const Iterator_range<I>& range)
|
Iterator_range<Prevent_deref<I> > make_prevent_deref_range(const Iterator_range<I>& range)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -183,7 +183,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
Face_handles face_handles() const {
|
Face_handles face_handles() const {
|
||||||
return make_prevent_deref_range(faces_begin(),faces_end());
|
return { faces_begin(),faces_end() };
|
||||||
}
|
}
|
||||||
|
|
||||||
Vertex_iterator vertices_begin() const {
|
Vertex_iterator vertices_begin() const {
|
||||||
|
|
@ -195,7 +195,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
Vertex_handles vertex_handles() const {
|
Vertex_handles vertex_handles() const {
|
||||||
return make_prevent_deref_range(vertices_begin(),vertices_end());
|
return { vertices_begin(),vertices_end() };
|
||||||
}
|
}
|
||||||
|
|
||||||
Edge_iterator edges_begin() const {
|
Edge_iterator edges_begin() const {
|
||||||
|
|
|
||||||
|
|
@ -661,7 +661,7 @@ public:
|
||||||
|
|
||||||
Cell_handles cell_handles() const
|
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
|
Cell_iterator raw_cells_begin() const
|
||||||
|
|
@ -720,7 +720,7 @@ public:
|
||||||
|
|
||||||
Vertex_handles vertex_handles() const
|
Vertex_handles vertex_handles() const
|
||||||
{
|
{
|
||||||
return make_prevent_deref_range(vertices_begin(), vertices_end());
|
return {vertices_begin(), vertices_end()};
|
||||||
}
|
}
|
||||||
|
|
||||||
// CIRCULATOR METHODS
|
// CIRCULATOR METHODS
|
||||||
|
|
|
||||||
|
|
@ -183,7 +183,7 @@ public:
|
||||||
operator Vertex_handle() const { return Base::base(); }
|
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 :
|
class Hidden_vertices_iterator :
|
||||||
public Filter_iterator<Finite_vib, Unhidden_tester>
|
public Filter_iterator<Finite_vib, Unhidden_tester>
|
||||||
|
|
@ -200,7 +200,7 @@ public:
|
||||||
operator Vertex_handle() const { return Base::base(); }
|
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
|
//for backward compatibility
|
||||||
typedef Finite_faces_iterator Face_iterator;
|
typedef Finite_faces_iterator Face_iterator;
|
||||||
|
|
@ -2236,7 +2236,7 @@ typename Regular_triangulation_2<Gt,Tds>::Finite_vertex_handles
|
||||||
Regular_triangulation_2<Gt,Tds>::
|
Regular_triangulation_2<Gt,Tds>::
|
||||||
finite_vertex_handles() const
|
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 >
|
template < class Gt, class Tds >
|
||||||
|
|
@ -2263,7 +2263,7 @@ typename Regular_triangulation_2<Gt,Tds>::Hidden_vertex_handles
|
||||||
Regular_triangulation_2<Gt,Tds>::
|
Regular_triangulation_2<Gt,Tds>::
|
||||||
hidden_vertex_handles() const
|
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 >
|
template < class Gt, class Tds >
|
||||||
|
|
|
||||||
|
|
@ -213,8 +213,8 @@ public:
|
||||||
typedef typename Tds::Vertex_handles All_vertex_handles;
|
typedef typename Tds::Vertex_handles All_vertex_handles;
|
||||||
typedef typename Tds::Edges All_edges;
|
typedef typename Tds::Edges All_edges;
|
||||||
|
|
||||||
typedef Iterator_range<Prevent_deref<Finite_faces_iterator> > Finite_face_handles;
|
typedef Iterator_range<Prevent_deref<Finite_faces_iterator, Face_handle> > Finite_face_handles;
|
||||||
typedef Iterator_range<Prevent_deref<Finite_vertices_iterator> > Finite_vertex_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<Finite_edges_iterator> Finite_edges;
|
||||||
typedef Iterator_range<Point_iterator> Points;
|
typedef Iterator_range<Point_iterator> Points;
|
||||||
|
|
||||||
|
|
@ -3206,7 +3206,7 @@ typename Triangulation_2<Gt, Tds>::Finite_face_handles
|
||||||
Triangulation_2<Gt, Tds>::
|
Triangulation_2<Gt, Tds>::
|
||||||
finite_face_handles() const
|
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 >
|
template <class Gt, class Tds >
|
||||||
|
|
@ -3235,7 +3235,7 @@ typename Triangulation_2<Gt, Tds>::Finite_vertex_handles
|
||||||
Triangulation_2<Gt, Tds>::
|
Triangulation_2<Gt, Tds>::
|
||||||
finite_vertex_handles() const
|
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 >
|
template <class Gt, class Tds >
|
||||||
|
|
|
||||||
|
|
@ -517,8 +517,8 @@ public:
|
||||||
operator Vertex_handle() const { return Base::base(); }
|
operator Vertex_handle() const { return Base::base(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef Iterator_range<Prevent_deref<Finite_cells_iterator> > Finite_cell_handles;
|
typedef Iterator_range<Prevent_deref<Finite_cells_iterator, Cell_handle> > Finite_cell_handles;
|
||||||
typedef Iterator_range<Prevent_deref<Finite_vertices_iterator> > Finite_vertex_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<Edge_iterator, Infinite_tester> Finite_edges_iterator;
|
||||||
typedef Filter_iterator<Facet_iterator, Infinite_tester> Finite_facets_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_cell_iterator_3<Self> Segment_cell_iterator;
|
||||||
typedef Triangulation_segment_simplex_iterator_3<Self> Segment_simplex_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;
|
typedef Iterator_range<Segment_simplex_iterator> Segment_traverser_simplices;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -1803,7 +1803,7 @@ public:
|
||||||
|
|
||||||
Finite_cell_handles finite_cell_handles() const
|
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
|
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(); }
|
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,
|
Segment_traverser_cell_handles segment_traverser_cell_handles(Vertex_handle vs,
|
||||||
Vertex_handle vt) const
|
Vertex_handle vt) const
|
||||||
{
|
{
|
||||||
return make_prevent_deref_range(segment_traverser_cells_begin(vs, vt),
|
return {segment_traverser_cells_begin(vs, vt),segment_traverser_cells_end()};
|
||||||
segment_traverser_cells_end());
|
|
||||||
}
|
}
|
||||||
Segment_traverser_cell_handles segment_traverser_cell_handles(const Point& ps,
|
Segment_traverser_cell_handles segment_traverser_cell_handles(const Point& ps,
|
||||||
const Point& pt,
|
const Point& pt,
|
||||||
Cell_handle hint = Cell_handle()) const
|
Cell_handle hint = Cell_handle()) const
|
||||||
{
|
{
|
||||||
return make_prevent_deref_range(segment_traverser_cells_begin(ps, pt, hint),
|
return { segment_traverser_cells_begin(ps, pt, hint), segment_traverser_cells_end()};
|
||||||
segment_traverser_cells_end());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//// Segment Simplex Iterator
|
//// Segment Simplex Iterator
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue