From e67b73e849ae346533f2f9490a9e98f790eb8946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 5 Oct 2022 22:58:40 +0200 Subject: [PATCH] Add some descriptor validity preconditions to BGL iterators --- BGL/include/CGAL/boost/graph/iterator.h | 26 +++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/iterator.h b/BGL/include/CGAL/boost/graph/iterator.h index c8af78eaf8b..90ee1c370dd 100644 --- a/BGL/include/CGAL/boost/graph/iterator.h +++ b/BGL/include/CGAL/boost/graph/iterator.h @@ -815,6 +815,7 @@ Iterator_range > halfedges_around_source(typename boost::graph_traits::halfedge_descriptor h, const Graph& g) { typedef Halfedge_around_source_iterator I; + CGAL_precondition(is_valid_halfedge_descriptor(h, g)); return make_range(I(h,g), I(h,g,1)); } @@ -826,6 +827,7 @@ template Iterator_range > halfedges_around_source(typename boost::graph_traits::vertex_descriptor v, const Graph& g) { + CGAL_precondition(is_valid_vertex_descriptor(v, g)); return halfedges_around_source(opposite(halfedge(v,g),g),g); } @@ -838,6 +840,7 @@ Iterator_range > halfedges_around_target(typename boost::graph_traits::halfedge_descriptor h, const Graph& g) { typedef Halfedge_around_target_iterator I; + CGAL_precondition(is_valid_halfedge_descriptor(h, g)); return make_range(I(h,g), I(h,g,1)); } @@ -849,6 +852,7 @@ template Iterator_range > halfedges_around_target(typename boost::graph_traits::vertex_descriptor v, const Graph& g) { + CGAL_precondition(is_valid_vertex_descriptor(v, g)); return halfedges_around_target(halfedge(v,g),g); } @@ -861,6 +865,7 @@ Iterator_range > halfedges_around_face(typename boost::graph_traits::halfedge_descriptor h, const Graph& g) { typedef Halfedge_around_face_iterator I; + CGAL_precondition(is_valid_halfedge_descriptor(h, g)); return make_range(I(h,g), I(h,g,1)); } @@ -965,6 +970,7 @@ Iterator_range > faces_around_target(typename boost::graph_traits::halfedge_descriptor h, const Graph& g) { typedef Face_around_target_iterator I; + CGAL_precondition(is_valid_halfedge_descriptor(h, g)); return make_range(I(h,g), I(h,g,1)); } @@ -977,6 +983,7 @@ Iterator_range > faces_around_face(typename boost::graph_traits::halfedge_descriptor h, const Graph& g) { typedef Face_around_face_iterator I; + CGAL_precondition(is_valid_halfedge_descriptor(h, g)); return make_range(I(h,g), I(h,g,1)); } @@ -1117,6 +1124,7 @@ Iterator_range > opposite_edges_around_face(typename boost::graph_traits::halfedge_descriptor h, const Graph& g) { typedef Opposite_edge_around_face_iterator I; + CGAL_precondition(is_valid_halfedge_descriptor(h, g)); return make_range(I(h,g), I(h,g,1)); } @@ -1152,11 +1160,10 @@ Iterator_range > edges_around_face(typename boost::graph_traits::halfedge_descriptor h, const Graph& g) { typedef Edge_around_face_iterator I; + CGAL_precondition(is_valid_halfedge_descriptor(h, g)); return make_range(I(h,g), I(h,g,1)); } - - /** * \ingroup PkgBGLIterators * A bidirectional circulator with value type `boost::graph_traits::%vertex_descriptor` over all vertices adjacent to the same vertex. @@ -1273,15 +1280,16 @@ Iterator_range > adjacent_vertices(typename boost::graph_traits::halfedge_descriptor h, const Graph& g) { typedef Vertex_around_target_iterator I; + CGAL_precondition(is_valid_halfedge_descriptor(h, g)); return make_range(I(h,g), I(h,g,1)); } - template Iterator_range > adjacent_vertices(typename boost::graph_traits::vertex_descriptor v, const Graph& g) { typedef Vertex_around_target_iterator I; + CGAL_precondition(is_valid_vertex_descriptor(v, g)); return make_range(I(halfedge(v,g),g), I(halfedge(v,g),g,1)); } @@ -1294,6 +1302,7 @@ Iterator_range > vertices_around_target(typename boost::graph_traits::halfedge_descriptor h, const Graph& g) { typedef Vertex_around_target_iterator I; + CGAL_precondition(is_valid_halfedge_descriptor(h, g)); return make_range(I(h,g), I(h,g,1)); } @@ -1302,6 +1311,7 @@ Iterator_range > vertices_around_target(typename boost::graph_traits::vertex_descriptor v, const Graph& g) { typedef Vertex_around_target_iterator I; + CGAL_precondition(is_valid_vertex_descriptor(v, g)); return make_range(I(halfedge(v,g),g), I(halfedge(v,g),g,1)); } /** @@ -1313,6 +1323,7 @@ Iterator_range > vertices_around_face(typename boost::graph_traits::halfedge_descriptor h, const Graph& g) { typedef Vertex_around_face_iterator I; + CGAL_precondition(is_valid_halfedge_descriptor(h, g)); return make_range(I(h,g), I(h,g,1)); } @@ -1355,9 +1366,6 @@ private: typename boost::graph_traits::edge_descriptor dereference() const { return opp(*this->base_reference()); } }; - - - template class In_edge_iterator : public boost::iterator_adaptor< @@ -1396,12 +1404,6 @@ public: typename boost::graph_traits::edge_descriptor dereference() const { return fct(*this->base_reference()); } }; - - - - - } // CGAL - #endif /* CGAL_BGL_ITERATORS_H */