boost::reference_wrapper ---> std::reference_wrapper

This commit is contained in:
Sébastien Loriot 2023-04-29 08:35:13 +02:00
parent 4fb4ca2b53
commit af337edf4d
1 changed files with 168 additions and 171 deletions

View File

@ -14,13 +14,13 @@
#include <boost/graph/graph_traits.hpp> #include <boost/graph/graph_traits.hpp>
#include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple.hpp>
#include <boost/ref.hpp> #include <utility>
namespace boost namespace boost
{ {
template<typename V, typename Graph> template<typename V, typename Graph>
struct graph_traits< struct graph_traits<
boost::tuple<boost::reference_wrapper<V>, boost::reference_wrapper<Graph> > > boost::tuple<std::reference_wrapper<V>, std::reference_wrapper<Graph> > >
: boost::graph_traits< Graph > : boost::graph_traits< Graph >
{ {
typedef boost::graph_traits<Graph> Base; typedef boost::graph_traits<Graph> Base;
@ -29,20 +29,20 @@ namespace boost
template<typename V, typename Graph> template<typename V, typename Graph>
struct graph_traits< struct graph_traits<
boost::tuple<boost::reference_wrapper<V>, boost::reference_wrapper<Graph> > const > boost::tuple<std::reference_wrapper<V>, std::reference_wrapper<Graph> > const >
: boost::graph_traits< Graph > : boost::graph_traits< Graph >
{}; {};
template<typename V, typename Graph, class PropertyTag> template<typename V, typename Graph, class PropertyTag>
struct property_map< struct property_map<
boost::tuple<boost::reference_wrapper<V>, boost::reference_wrapper<Graph> >, boost::tuple<std::reference_wrapper<V>, std::reference_wrapper<Graph> >,
PropertyTag> PropertyTag>
: public property_map<Graph, PropertyTag> : public property_map<Graph, PropertyTag>
{}; {};
template<typename V, typename Graph, class PropertyTag> template<typename V, typename Graph, class PropertyTag>
struct property_map< struct property_map<
const boost::tuple<boost::reference_wrapper<V>, boost::reference_wrapper<Graph> >, const boost::tuple<std::reference_wrapper<V>, std::reference_wrapper<Graph> >,
PropertyTag> PropertyTag>
: public property_map<Graph, PropertyTag> : public property_map<Graph, PropertyTag>
{}; {};
@ -52,11 +52,11 @@ namespace boost
namespace CGAL namespace CGAL
{ {
template<typename V, typename Graph> template<typename V, typename Graph>
boost::tuple<boost::reference_wrapper<V>, boost::tuple<std::reference_wrapper<V>,
boost::reference_wrapper<Graph> > std::reference_wrapper<Graph> >
make_graph_with_visitor(V& v, Graph& g) make_graph_with_visitor(V& v, Graph& g)
{ {
return boost::make_tuple(boost::ref(v), boost::ref(g)); return boost::make_tuple(std::ref(v), std::ref(g));
} }
template<typename Graph> template<typename Graph>
@ -67,11 +67,8 @@ public:
typedef typename gt::halfedge_descriptor halfedge_descriptor; typedef typename gt::halfedge_descriptor halfedge_descriptor;
typedef typename gt::edge_descriptor edge_descriptor; typedef typename gt::edge_descriptor edge_descriptor;
typedef typename gt::vertex_descriptor vertex_descriptor; typedef typename gt::vertex_descriptor vertex_descriptor;
}; };
//// OVERLOADS FOR Visitor //// OVERLOADS FOR Visitor
template<typename Graph> template<typename Graph>
@ -260,119 +257,119 @@ void get(PropertyTag ptag, const Visitor_base<Graph>& w)
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits<Graph>::vertices_size_type typename boost::graph_traits<Graph>::vertices_size_type
num_vertices(const boost::tuple<boost::reference_wrapper<Visitor>, num_vertices(const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
num_vertices(boost::unwrap_ref(w.get<0>())); num_vertices(get<0>(w).get());
return num_vertices(boost::unwrap_ref(w.get<1>())); return num_vertices(get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits<Graph>::edges_size_type typename boost::graph_traits<Graph>::edges_size_type
num_edges(const boost::tuple<boost::reference_wrapper<Visitor>, num_edges(const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
num_edges(boost::unwrap_ref(w.get<0>())); num_edges(get<0>(w).get());
return num_edges(boost::unwrap_ref(w.get<1>())); return num_edges(get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits<Graph>::degree_size_type typename boost::graph_traits<Graph>::degree_size_type
degree(typename boost::graph_traits<Graph>::vertex_descriptor v degree(typename boost::graph_traits<Graph>::vertex_descriptor v
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
degree(v, boost::unwrap_ref(w.get<0>())); degree(v, get<0>(w).get());
return degree(v, boost::unwrap_ref(w.get<1>())); return degree(v, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits<Graph>::degree_size_type typename boost::graph_traits<Graph>::degree_size_type
out_degree(typename boost::graph_traits<Graph>::vertex_descriptor v out_degree(typename boost::graph_traits<Graph>::vertex_descriptor v
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
out_degree(v, boost::unwrap_ref(w.get<0>())); out_degree(v, get<0>(w).get());
return out_degree(v, boost::unwrap_ref(w.get<1>())); return out_degree(v, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits<Graph>::degree_size_type typename boost::graph_traits<Graph>::degree_size_type
in_degree(typename boost::graph_traits<Graph>::vertex_descriptor v in_degree(typename boost::graph_traits<Graph>::vertex_descriptor v
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
in_degree(v, boost::unwrap_ref(w.get<0>())); in_degree(v, get<0>(w).get());
return in_degree(v, boost::unwrap_ref(w.get<1>())); return in_degree(v, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits<Graph>::vertex_descriptor typename boost::graph_traits<Graph>::vertex_descriptor
source(typename boost::graph_traits<Graph>::edge_descriptor e source(typename boost::graph_traits<Graph>::edge_descriptor e
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> > & w) std::reference_wrapper<Graph> > & w)
{ {
source(e, boost::unwrap_ref(w.get<0>())); source(e, get<0>(w).get());
return source(e, boost::unwrap_ref(w.get<1>())); return source(e, get<1>(w).get);
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits<Graph>::vertex_descriptor typename boost::graph_traits<Graph>::vertex_descriptor
target(typename boost::graph_traits<Graph>::edge_descriptor e target(typename boost::graph_traits<Graph>::edge_descriptor e
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> > & w) std::reference_wrapper<Graph> > & w)
{ {
target(e, boost::unwrap_ref(w.get<0>())); target(e, get<0>(w).get());
return target(e, boost::unwrap_ref(w.get<1>())); return target(e, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
std::pair<typename boost::graph_traits<Graph>::edge_descriptor, bool> std::pair<typename boost::graph_traits<Graph>::edge_descriptor, bool>
edge(typename boost::graph_traits<Graph>::vertex_descriptor u edge(typename boost::graph_traits<Graph>::vertex_descriptor u
, typename boost::graph_traits<Graph>::vertex_descriptor v , typename boost::graph_traits<Graph>::vertex_descriptor v
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> > & w) std::reference_wrapper<Graph> > & w)
{ {
edge(u, v, boost::unwrap_ref(w.get<0>())); edge(u, v, get<0>(w).get());
return edge(u, v, boost::unwrap_ref(w.get<1>())); return edge(u, v, get<1>(w).get);
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
inline CGAL::Iterator_range<typename boost::graph_traits<Graph>::vertex_iterator> inline CGAL::Iterator_range<typename boost::graph_traits<Graph>::vertex_iterator>
vertices(const boost::tuple<boost::reference_wrapper<Visitor>, vertices(const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
vertices(boost::unwrap_ref(w.get<0>())); vertices(get<0>(w).get());
return vertices(boost::unwrap_ref(w.get<1>())); return vertices(get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
inline CGAL::Iterator_range<typename boost::graph_traits<Graph>::edge_iterator> inline CGAL::Iterator_range<typename boost::graph_traits<Graph>::edge_iterator>
edges(const boost::tuple<boost::reference_wrapper<Visitor>, edges(const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
edges(boost::unwrap_ref(w.get<0>())); edges(get<0>(w).get());
return edges(boost::unwrap_ref(w.get<1>())); return edges(get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
inline CGAL::Iterator_range<typename boost::graph_traits<Graph>::in_edge_iterator> inline CGAL::Iterator_range<typename boost::graph_traits<Graph>::in_edge_iterator>
in_edges(typename boost::graph_traits<Graph>::vertex_descriptor u in_edges(typename boost::graph_traits<Graph>::vertex_descriptor u
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
in_edges(u, boost::unwrap_ref(w.get<0>())); in_edges(u, get<0>(w).get());
return in_edges(u, boost::unwrap_ref(w.get<1>())); return in_edges(u, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
inline CGAL::Iterator_range<typename boost::graph_traits<Graph>::out_edge_iterator> inline CGAL::Iterator_range<typename boost::graph_traits<Graph>::out_edge_iterator>
out_edges(typename boost::graph_traits<Graph>::vertex_descriptor u out_edges(typename boost::graph_traits<Graph>::vertex_descriptor u
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
out_edges(u, boost::unwrap_ref(w.get<0>())); out_edges(u, get<0>(w).get());
return out_edges(u, boost::unwrap_ref(w.get<1>())); return out_edges(u, get<1>(w).get());
} }
// //
@ -381,72 +378,72 @@ out_edges(typename boost::graph_traits<Graph>::vertex_descriptor u
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::vertex_descriptor typename boost::graph_traits< Graph >::vertex_descriptor
add_vertex(boost::tuple<boost::reference_wrapper<Visitor>, add_vertex(boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
add_vertex(boost::unwrap_ref(w.get<0>())); add_vertex(get<0>(w).get());
return add_vertex(boost::unwrap_ref(w.get<1>())); return add_vertex(get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::vertex_descriptor typename boost::graph_traits< Graph >::vertex_descriptor
add_vertex(const typename boost::graph_traits<Graph >::vertex_property_type& p add_vertex(const typename boost::graph_traits<Graph >::vertex_property_type& p
, boost::tuple<boost::reference_wrapper<Visitor>, , boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
add_vertex(p, boost::unwrap_ref(w.get<0>())); add_vertex(p, get<0>(w).get());
return add_vertex(p, boost::unwrap_ref(w.get<1>())); return add_vertex(p, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
void void
remove_vertex(typename boost::graph_traits< Graph >::vertex_descriptor v remove_vertex(typename boost::graph_traits< Graph >::vertex_descriptor v
, boost::tuple<boost::reference_wrapper<Visitor>, , boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
remove_vertex(v, boost::unwrap_ref(w.get<0>())); remove_vertex(v, get<0>(w).get());
remove_vertex(v, boost::unwrap_ref(w.get<1>())); remove_vertex(v, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::edge_descriptor typename boost::graph_traits< Graph >::edge_descriptor
add_edge(boost::tuple<boost::reference_wrapper<Visitor>, add_edge(boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
add_edge(boost::unwrap_ref(w.get<0>())); add_edge(get<0>(w).get());
return add_edge(boost::unwrap_ref(w.get<1>())); return add_edge(get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
void void
remove_edge(typename boost::graph_traits< Graph >::edge_descriptor e remove_edge(typename boost::graph_traits< Graph >::edge_descriptor e
, boost::tuple<boost::reference_wrapper<Visitor>, , boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
remove_edge(e, boost::unwrap_ref(w.get<0>())); remove_edge(e, get<0>(w).get());
remove_edge(e, boost::unwrap_ref(w.get<1>())); remove_edge(e, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
void void
set_target(typename boost::graph_traits< Graph >::halfedge_descriptor h1 set_target(typename boost::graph_traits< Graph >::halfedge_descriptor h1
, typename boost::graph_traits< Graph >::vertex_descriptor v , typename boost::graph_traits< Graph >::vertex_descriptor v
, boost::tuple<boost::reference_wrapper<Visitor>, , boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
set_target(h1, v, boost::unwrap_ref(w.get<0>())); set_target(h1, v, get<0>(w).get());
set_target(h1, v, boost::unwrap_ref(w.get<1>())); set_target(h1, v, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
void void
set_next(typename boost::graph_traits< Graph >::halfedge_descriptor h1 set_next(typename boost::graph_traits< Graph >::halfedge_descriptor h1
, typename boost::graph_traits< Graph >::halfedge_descriptor h2 , typename boost::graph_traits< Graph >::halfedge_descriptor h2
, boost::tuple<boost::reference_wrapper<Visitor >, , boost::tuple<std::reference_wrapper<Visitor >,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
set_next(h1, h2, boost::unwrap_ref(w.get<0>())); set_next(h1, h2, get<0>(w).get());
set_next(h1, h2, boost::unwrap_ref(w.get<1>())); set_next(h1, h2, get<1>(w).get());
} }
// //
@ -454,65 +451,65 @@ set_next(typename boost::graph_traits< Graph >::halfedge_descriptor h1
// //
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::face_descriptor typename boost::graph_traits< Graph >::face_descriptor
add_face(boost::tuple<boost::reference_wrapper<Visitor>, add_face(boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
add_face(boost::unwrap_ref(w.get<0>())); add_face(get<0>(w).get());
return add_face(boost::unwrap_ref(w.get<1>())); return add_face(get<1>(w).get());
} }
template <class InputIterator, class Graph, class Visitor> template <class InputIterator, class Graph, class Visitor>
typename boost::graph_traits< Graph >::face_descriptor typename boost::graph_traits< Graph >::face_descriptor
add_face(InputIterator begin, add_face(InputIterator begin,
InputIterator end, InputIterator end,
boost::tuple<boost::reference_wrapper<Visitor>, boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
add_face(begin, end, boost::unwrap_ref(w.get<0>())); add_face(begin, end, get<0>(w).get());
return add_face(begin, end, boost::unwrap_ref(w.get<1>())); return add_face(begin, end, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
void void
remove_face(typename boost::graph_traits< Graph >::face_descriptor f remove_face(typename boost::graph_traits< Graph >::face_descriptor f
, boost::tuple<boost::reference_wrapper<Visitor>, , boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
remove_face(f, boost::unwrap_ref(w.get<0>())); remove_face(f, get<0>(w).get());
return remove_face(f, boost::unwrap_ref(w.get<1>())); return remove_face(f, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
void void
set_face(typename boost::graph_traits< Graph >::halfedge_descriptor h set_face(typename boost::graph_traits< Graph >::halfedge_descriptor h
, typename boost::graph_traits< Graph >::face_descriptor f , typename boost::graph_traits< Graph >::face_descriptor f
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
set_face(h, f, boost::unwrap_ref(w.get<0>())); set_face(h, f, get<0>(w).get());
set_face(h, f, boost::unwrap_ref(w.get<1>())); set_face(h, f, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
void void
set_halfedge(typename boost::graph_traits< Graph >::face_descriptor f set_halfedge(typename boost::graph_traits< Graph >::face_descriptor f
, typename boost::graph_traits< Graph >::halfedge_descriptor h , typename boost::graph_traits< Graph >::halfedge_descriptor h
, boost::tuple<boost::reference_wrapper<Visitor>, , boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
set_halfedge(f, h, boost::unwrap_ref(w.get<0>())); set_halfedge(f, h, get<0>(w).get());
set_halfedge(f, h, boost::unwrap_ref(w.get<1>())); set_halfedge(f, h, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
void void
set_halfedge(typename boost::graph_traits< Graph >::vertex_descriptor v set_halfedge(typename boost::graph_traits< Graph >::vertex_descriptor v
, typename boost::graph_traits< Graph >::halfedge_descriptor h , typename boost::graph_traits< Graph >::halfedge_descriptor h
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
set_halfedge(v, h, boost::unwrap_ref(w.get<0>())); set_halfedge(v, h, get<0>(w).get());
set_halfedge(v, h, boost::unwrap_ref(w.get<1>())); set_halfedge(v, h, get<1>(w).get());
} }
// //
@ -521,31 +518,31 @@ boost::reference_wrapper<Graph> >& w)
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::edge_descriptor typename boost::graph_traits< Graph >::edge_descriptor
edge(typename boost::graph_traits< Graph >::halfedge_descriptor h edge(typename boost::graph_traits< Graph >::halfedge_descriptor h
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
edge(h, boost::unwrap_ref(w.get<0>())); edge(h, get<0>(w).get());
return edge(h, boost::unwrap_ref(w.get<1>())); return edge(h, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::halfedge_descriptor typename boost::graph_traits< Graph >::halfedge_descriptor
halfedge(typename boost::graph_traits< Graph >::edge_descriptor e halfedge(typename boost::graph_traits< Graph >::edge_descriptor e
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
halfedge(e, boost::unwrap_ref(w.get<0>())); halfedge(e, get<0>(w).get());
return halfedge(e, boost::unwrap_ref(w.get<1>())); return halfedge(e, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::halfedge_descriptor typename boost::graph_traits< Graph >::halfedge_descriptor
halfedge(typename boost::graph_traits< Graph >::vertex_descriptor v halfedge(typename boost::graph_traits< Graph >::vertex_descriptor v
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
halfedge(v, boost::unwrap_ref(w.get<0>())); halfedge(v, get<0>(w).get());
return halfedge(v, boost::unwrap_ref(w.get<1>())); return halfedge(v, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
@ -553,58 +550,58 @@ std::pair< typename boost::graph_traits< Graph >::halfedge_descriptor
, bool> , bool>
halfedge(typename boost::graph_traits< Graph >::vertex_descriptor u halfedge(typename boost::graph_traits< Graph >::vertex_descriptor u
, typename boost::graph_traits< Graph >::vertex_descriptor v , typename boost::graph_traits< Graph >::vertex_descriptor v
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
halfedge(u, v, boost::unwrap_ref(w.get<0>())); halfedge(u, v, get<0>(w).get());
return halfedge(u, v, boost::unwrap_ref(w.get<1>())); return halfedge(u, v, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::halfedge_descriptor typename boost::graph_traits< Graph >::halfedge_descriptor
opposite(typename boost::graph_traits< Graph >::halfedge_descriptor h opposite(typename boost::graph_traits< Graph >::halfedge_descriptor h
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
opposite(h, boost::unwrap_ref(w.get<0>())); opposite(h, get<0>(w).get());
return opposite(h, boost::unwrap_ref(w.get<1>())); return opposite(h, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::vertex_descriptor typename boost::graph_traits< Graph >::vertex_descriptor
source(typename boost::graph_traits< Graph >::halfedge_descriptor h source(typename boost::graph_traits< Graph >::halfedge_descriptor h
, const boost::tuple<boost::reference_wrapper<Visitor>, , const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
source(h, boost::unwrap_ref(w.get<0>())); source(h, get<0>(w).get());
return source(h, boost::unwrap_ref(w.get<1>())); return source(h, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::vertex_descriptor typename boost::graph_traits< Graph >::vertex_descriptor
target(typename boost::graph_traits< Graph >::halfedge_descriptor h target(typename boost::graph_traits< Graph >::halfedge_descriptor h
, const boost::tuple<boost::reference_wrapper<Visitor>, boost::reference_wrapper<Graph> >& w) , const boost::tuple<std::reference_wrapper<Visitor>, std::reference_wrapper<Graph> >& w)
{ {
target(h, boost::unwrap_ref(w.get<0>())); target(h, get<0>(w).get());
return target(h, boost::unwrap_ref(w.get<1>())); return target(h, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::halfedge_descriptor typename boost::graph_traits< Graph >::halfedge_descriptor
next(typename boost::graph_traits< Graph >::halfedge_descriptor outedge next(typename boost::graph_traits< Graph >::halfedge_descriptor outedge
, const boost::tuple<boost::reference_wrapper<Visitor>, boost::reference_wrapper<Graph> >& w) , const boost::tuple<std::reference_wrapper<Visitor>, std::reference_wrapper<Graph> >& w)
{ {
next(outedge, boost::unwrap_ref(w.get<0>())); next(outedge, get<0>(w).get());
return next(outedge, boost::unwrap_ref(w.get<1>())); return next(outedge, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::halfedge_descriptor typename boost::graph_traits< Graph >::halfedge_descriptor
prev(typename boost::graph_traits< Graph >::halfedge_descriptor outedge prev(typename boost::graph_traits< Graph >::halfedge_descriptor outedge
, const boost::tuple<boost::reference_wrapper<Visitor>, boost::reference_wrapper<Graph> >& w) , const boost::tuple<std::reference_wrapper<Visitor>, std::reference_wrapper<Graph> >& w)
{ {
prev(outedge, boost::unwrap_ref(w.get<0>())); prev(outedge, get<0>(w).get());
return prev(outedge, boost::unwrap_ref(w.get<1>())); return prev(outedge, get<1>(w).get());
} }
// //
@ -612,73 +609,73 @@ prev(typename boost::graph_traits< Graph >::halfedge_descriptor outedge
// //
template <class Graph, class Visitor> template <class Graph, class Visitor>
CGAL::Iterator_range<typename boost::graph_traits< Graph >::halfedge_iterator> CGAL::Iterator_range<typename boost::graph_traits< Graph >::halfedge_iterator>
halfedges(const boost::tuple<boost::reference_wrapper<Visitor>, boost::reference_wrapper<Graph> >& w) halfedges(const boost::tuple<std::reference_wrapper<Visitor>, std::reference_wrapper<Graph> >& w)
{ {
halfedges(boost::unwrap_ref(w.get<0>())); halfedges(get<0>(w).get());
return halfedges(boost::unwrap_ref(w.get<1>())); return halfedges(get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::halfedges_size_type typename boost::graph_traits< Graph >::halfedges_size_type
num_halfedges(const boost::tuple<boost::reference_wrapper<Visitor>, boost::reference_wrapper<Graph> >& w) num_halfedges(const boost::tuple<std::reference_wrapper<Visitor>, std::reference_wrapper<Graph> >& w)
{ {
num_halfedges(boost::unwrap_ref(w.get<0>())); num_halfedges(get<0>(w).get());
return num_halfedges(boost::unwrap_ref(w.get<1>())); return num_halfedges(get<1>(w).get());
} }
// Graph // Graph
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::face_descriptor typename boost::graph_traits< Graph >::face_descriptor
face(typename boost::graph_traits< Graph >::halfedge_descriptor h face(typename boost::graph_traits< Graph >::halfedge_descriptor h
, const boost::tuple<boost::reference_wrapper<Visitor>, boost::reference_wrapper<Graph> >& w) , const boost::tuple<std::reference_wrapper<Visitor>, std::reference_wrapper<Graph> >& w)
{ {
face(h, boost::unwrap_ref(w.get<0>())); face(h, get<0>(w).get());
return face(h, boost::unwrap_ref(w.get<1>())); return face(h, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits< Graph >::halfedge_descriptor typename boost::graph_traits< Graph >::halfedge_descriptor
halfedge(typename boost::graph_traits< Graph >::face_descriptor f halfedge(typename boost::graph_traits< Graph >::face_descriptor f
, const boost::tuple<boost::reference_wrapper<Visitor>, boost::reference_wrapper<Graph> >& w) , const boost::tuple<std::reference_wrapper<Visitor>, std::reference_wrapper<Graph> >& w)
{ {
halfedge(f, boost::unwrap_ref(w.get<0>())); halfedge(f, get<0>(w).get());
return halfedge(f, boost::unwrap_ref(w.get<1>())); return halfedge(f, get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
inline CGAL::Iterator_range<typename boost::graph_traits<Graph>::face_iterator > inline CGAL::Iterator_range<typename boost::graph_traits<Graph>::face_iterator >
faces(const boost::tuple<boost::reference_wrapper<Visitor>, boost::reference_wrapper<Graph> >& w) faces(const boost::tuple<std::reference_wrapper<Visitor>, std::reference_wrapper<Graph> >& w)
{ {
faces(boost::unwrap_ref(w.get<0>())); faces(get<0>(w).get());
return faces(boost::unwrap_ref(w.get<1>())); return faces(get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
typename boost::graph_traits<Graph>::faces_size_type typename boost::graph_traits<Graph>::faces_size_type
num_faces(const boost::tuple<boost::reference_wrapper<Visitor>, num_faces(const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
num_faces(boost::unwrap_ref(w.get<0>())); num_faces(get<0>(w).get());
return num_faces(boost::unwrap_ref(w.get<1>())); return num_faces(get<1>(w).get());
} }
template <class Graph, class Visitor> template <class Graph, class Visitor>
bool is_valid(const boost::tuple<boost::reference_wrapper<Visitor>, bool is_valid(const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w std::reference_wrapper<Graph> >& w
, bool verbose = false) , bool verbose = false)
{ {
is_valid(boost::unwrap_ref(w.get<0>()), verbose); is_valid(get<0>(w).get(), verbose);
return is_valid(boost::unwrap_ref(w.get<1>()), verbose); return is_valid(get<1>(w).get(), verbose);
} }
template <class Graph, class PropertyTag, class Visitor> template <class Graph, class PropertyTag, class Visitor>
typename boost::property_map< Graph, PropertyTag >::type typename boost::property_map< Graph, PropertyTag >::type
get(PropertyTag ptag, get(PropertyTag ptag,
const boost::tuple<boost::reference_wrapper<Visitor>, const boost::tuple<std::reference_wrapper<Visitor>,
boost::reference_wrapper<Graph> >& w) std::reference_wrapper<Graph> >& w)
{ {
get(ptag, boost::unwrap_ref(w.get<0>())); get(ptag, get<0>(w).get());
return get(ptag, boost::unwrap_ref(w.get<1>())); return get(ptag, get<1>(w).get());
} }
}//end namespace CGAL }//end namespace CGAL