diff --git a/BGL/include/CGAL/boost/graph/Dual.h b/BGL/include/CGAL/boost/graph/Dual.h index 53826f65fed..dc4712c3776 100644 --- a/BGL/include/CGAL/boost/graph/Dual.h +++ b/BGL/include/CGAL/boost/graph/Dual.h @@ -174,13 +174,41 @@ num_vertices(const CGAL::Dual

& dual) { return num_faces(dual.primal()); } + +template +typename boost::graph_traits >::edges_size_type +num_edges(const CGAL::Dual

& dual) +{ + return num_edges(dual.primal()); +} + +template +typename boost::graph_traits >::halfedges_size_type +num_halfedges(const CGAL::Dual

& dual) +{ + return num_halfedges(dual.primal()); +} +template +typename boost::graph_traits >::faces_size_type +num_faces(const CGAL::Dual

& dual) +{ + return num_vertices(dual.primal()); +} + template Iterator_range >::vertex_iterator> vertices(const CGAL::Dual

& dual) { return faces(dual.primal()); } + +template +Iterator_range >::face_iterator> +faces(const CGAL::Dual

& dual) +{ + return vertices(dual.primal()); +} template Iterator_range >::halfedge_iterator> @@ -196,6 +224,29 @@ edges(const CGAL::Dual

& dual) return edges(dual.primal()); } +template +std::pair >::edge_descriptor, bool> +edge(typename boost::graph_traits >::vertex_descriptor u, + typename boost::graph_traits >::vertex_descriptor v, + const Dual

& dual) +{ + typename boost::graph_traits >::out_edge_iterator e, e_end; + for(boost::tie(e, e_end) = out_edges(u, dual); e != e_end; ++e) { + if(target(*e, dual) == v) + return std::make_pair(*e, true); + } + + return std::make_pair(typename boost::graph_traits >::edge_descriptor(), false); +} + +template +typename boost::graph_traits >::edge_descriptor +edge(typename boost::graph_traits >::halfedge_descriptor h, + const Dual

& dual) +{ + return edge(h, dual.primal()); +} + template typename boost::graph_traits >::vertex_descriptor source(typename boost::graph_traits >::halfedge_descriptor h, @@ -256,6 +307,22 @@ halfedge(typename boost::graph_traits >::edge_descriptor e, { return halfedge(e, dual.primal()); } + +template +std::pair >::halfedge_descriptor, bool> +halfedge(typename boost::graph_traits >::vertex_descriptor u, + typename boost::graph_traits >::vertex_descriptor v, + const Dual

& dual) +{ + typename boost::graph_traits >::out_edge_iterator e, e_end; + for(boost::tie(e, e_end) = out_edges(u, dual); e != e_end; ++e) { + if(target(*e, dual) == v) + return std::make_pair(halfedge(*e, dual), true); + } + + return std::make_pair(boost::graph_traits >::null_halfedge(), false); +} + template typename boost::graph_traits >::face_descriptor face(typename boost::graph_traits >::halfedge_descriptor h,