]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/graph/copy.hpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / boost / graph / copy.hpp
index 77aebcde1bcd0e6c922137479378223117ef0f6f..7cbbc25c72c86d0d8697d51132680a00d2d8a92c 100644 (file)
   template <typename VertexListGraph, typename MutableGraph>
   void copy_graph(const VertexListGraph& g_in, MutableGraph& g_out)
 
-  template <typename VertexListGraph, typename MutableGraph, 
+  template <typename VertexListGraph, typename MutableGraph,
     class P, class T, class R>
-  void copy_graph(const VertexListGraph& g_in, MutableGraph& g_out, 
+  void copy_graph(const VertexListGraph& g_in, MutableGraph& g_out,
                   const bgl_named_params<P, T, R>& params)
 
 
   template <typename IncidenceGraph, typename MutableGraph>
   typename graph_traits<MutableGraph>::vertex_descriptor
-  copy_component(IncidenceGraph& g_in, 
+  copy_component(IncidenceGraph& g_in,
                  typename graph_traits<IncidenceGraph>::vertex_descriptor src,
                  MutableGraph& g_out)
 
-  template <typename IncidenceGraph, typename MutableGraph, 
+  template <typename IncidenceGraph, typename MutableGraph,
            typename P, typename T, typename R>
   typename graph_traits<MutableGraph>::vertex_descriptor
-  copy_component(IncidenceGraph& g_in, 
+  copy_component(IncidenceGraph& g_in,
                  typename graph_traits<IncidenceGraph>::vertex_descriptor src,
-                 MutableGraph& g_out, 
+                 MutableGraph& g_out,
                  const bgl_named_params<P, T, R>& params)
  */
 
-
 #ifndef BOOST_GRAPH_COPY_HPP
 #define BOOST_GRAPH_COPY_HPP
 
 #include <boost/graph/breadth_first_search.hpp>
 #include <boost/type_traits/conversion_traits.hpp>
 
-namespace boost {
+namespace boost
+{
 
-  namespace detail {
+namespace detail
+{
 
     // Hack to make transpose_graph work with the same interface as before
-    template <typename Graph, typename Desc>
-    struct remove_reverse_edge_descriptor {
-      typedef Desc type;
-      static Desc convert(const Desc& d, const Graph&) {return d;}
+    template < typename Graph, typename Desc >
+    struct remove_reverse_edge_descriptor
+    {
+        typedef Desc type;
+        static Desc convert(const Desc& d, const Graph&) { return d; }
     };
 
-    template <typename Graph, typename Desc>
-    struct remove_reverse_edge_descriptor<Graph, reverse_graph_edge_descriptor<Desc> > {
-      typedef Desc type;
-      static Desc convert(const reverse_graph_edge_descriptor<Desc>& d, const Graph& g) {
-        return get(edge_underlying, g, d);
-      }
+    template < typename Graph, typename Desc >
+    struct remove_reverse_edge_descriptor< Graph,
+        reverse_graph_edge_descriptor< Desc > >
+    {
+        typedef Desc type;
+        static Desc convert(
+            const reverse_graph_edge_descriptor< Desc >& d, const Graph& g)
+        {
+            return get(edge_underlying, g, d);
+        }
     };
 
     // Add a reverse_graph_edge_descriptor wrapper if the Graph is a
@@ -74,437 +80,478 @@ namespace boost {
     // case comes from the fact that transpose_graph uses reverse_graph
     // internally but doesn't expose the different edge descriptor type to the
     // user).
-    template <typename Desc, typename Graph>
-    struct add_reverse_edge_descriptor {
-      typedef Desc type;
-      static Desc convert(const Desc& d) {return d;}
+    template < typename Desc, typename Graph >
+    struct add_reverse_edge_descriptor
+    {
+        typedef Desc type;
+        static Desc convert(const Desc& d) { return d; }
     };
 
-    template <typename Desc, typename G, typename GR>
-    struct add_reverse_edge_descriptor<Desc, boost::reverse_graph<G, GR> > {
-      typedef reverse_graph_edge_descriptor<Desc> type;
-      static reverse_graph_edge_descriptor<Desc> convert(const Desc& d) {
-        return reverse_graph_edge_descriptor<Desc>(d);
-      }
+    template < typename Desc, typename G, typename GR >
+    struct add_reverse_edge_descriptor< Desc, boost::reverse_graph< G, GR > >
+    {
+        typedef reverse_graph_edge_descriptor< Desc > type;
+        static reverse_graph_edge_descriptor< Desc > convert(const Desc& d)
+        {
+            return reverse_graph_edge_descriptor< Desc >(d);
+        }
     };
 
-    template <typename Desc, typename G, typename GR>
-    struct add_reverse_edge_descriptor<reverse_graph_edge_descriptor<Desc>, boost::reverse_graph<G, GR> > {
-      typedef reverse_graph_edge_descriptor<Desc> type;
-      static reverse_graph_edge_descriptor<Desc> convert(const reverse_graph_edge_descriptor<Desc>& d) {
-        return d;
-      }
+    template < typename Desc, typename G, typename GR >
+    struct add_reverse_edge_descriptor< reverse_graph_edge_descriptor< Desc >,
+        boost::reverse_graph< G, GR > >
+    {
+        typedef reverse_graph_edge_descriptor< Desc > type;
+        static reverse_graph_edge_descriptor< Desc > convert(
+            const reverse_graph_edge_descriptor< Desc >& d)
+        {
+            return d;
+        }
     };
 
     // Default edge and vertex property copiers
 
-    template <typename Graph1, typename Graph2>
-    struct edge_copier {
-      edge_copier(const Graph1& g1, Graph2& g2)
-        : edge_all_map1(get(edge_all, g1)), 
-          edge_all_map2(get(edge_all, g2)) { }
-
-      template <typename Edge1, typename Edge2>
-      void operator()(const Edge1& e1, Edge2& e2) const {
-        put(edge_all_map2, e2, get(edge_all_map1, add_reverse_edge_descriptor<Edge1, Graph1>::convert(e1)));
-      }
-      typename property_map<Graph1, edge_all_t>::const_type edge_all_map1;
-      mutable typename property_map<Graph2, edge_all_t>::type edge_all_map2;
+    template < typename Graph1, typename Graph2 > struct edge_copier
+    {
+        edge_copier(const Graph1& g1, Graph2& g2)
+        : edge_all_map1(get(edge_all, g1)), edge_all_map2(get(edge_all, g2))
+        {
+        }
+
+        template < typename Edge1, typename Edge2 >
+        void operator()(const Edge1& e1, Edge2& e2) const
+        {
+            put(edge_all_map2, e2,
+                get(edge_all_map1,
+                    add_reverse_edge_descriptor< Edge1, Graph1 >::convert(e1)));
+        }
+        typename property_map< Graph1, edge_all_t >::const_type edge_all_map1;
+        mutable typename property_map< Graph2, edge_all_t >::type edge_all_map2;
     };
-    template <typename Graph1, typename Graph2>
-    inline edge_copier<Graph1,Graph2>
-    make_edge_copier(const Graph1& g1, Graph2& g2)
+    template < typename Graph1, typename Graph2 >
+    inline edge_copier< Graph1, Graph2 > make_edge_copier(
+        const Graph1& g1, Graph2& g2)
     {
-      return edge_copier<Graph1,Graph2>(g1, g2);
+        return edge_copier< Graph1, Graph2 >(g1, g2);
     }
 
-    template <typename Graph1, typename Graph2>
-    struct vertex_copier {
-      vertex_copier(const Graph1& g1, Graph2& g2)
-        : vertex_all_map1(get(vertex_all, g1)), 
-          vertex_all_map2(get(vertex_all, g2)) { }
-
-      template <typename Vertex1, typename Vertex2>
-      void operator()(const Vertex1& v1, Vertex2& v2) const {
-        put(vertex_all_map2, v2, get(vertex_all_map1, v1));
-      }
-      typename property_map<Graph1, vertex_all_t>::const_type vertex_all_map1;
-      mutable typename property_map<Graph2, vertex_all_t>::type
-        vertex_all_map2;
+    template < typename Graph1, typename Graph2 > struct vertex_copier
+    {
+        vertex_copier(const Graph1& g1, Graph2& g2)
+        : vertex_all_map1(get(vertex_all, g1))
+        , vertex_all_map2(get(vertex_all, g2))
+        {
+        }
+
+        template < typename Vertex1, typename Vertex2 >
+        void operator()(const Vertex1& v1, Vertex2& v2) const
+        {
+            put(vertex_all_map2, v2, get(vertex_all_map1, v1));
+        }
+        typename property_map< Graph1, vertex_all_t >::const_type
+            vertex_all_map1;
+        mutable
+            typename property_map< Graph2, vertex_all_t >::type vertex_all_map2;
     };
-    template <typename Graph1, typename Graph2>
-    inline vertex_copier<Graph1,Graph2>
-    make_vertex_copier(const Graph1& g1, Graph2& g2)
+    template < typename Graph1, typename Graph2 >
+    inline vertex_copier< Graph1, Graph2 > make_vertex_copier(
+        const Graph1& g1, Graph2& g2)
     {
-      return vertex_copier<Graph1,Graph2>(g1, g2);
+        return vertex_copier< Graph1, Graph2 >(g1, g2);
     }
 
     // Copy all the vertices and edges of graph g_in into graph g_out.
     // The copy_vertex and copy_edge function objects control how vertex
     // and edge properties are copied.
 
-    template <int Version>
-    struct copy_graph_impl { };
+    template < int Version > struct copy_graph_impl
+    {
+    };
 
-    template <> struct copy_graph_impl<0>
+    template <> struct copy_graph_impl< 0 >
     {
-      template <typename Graph, typename MutableGraph, 
-        typename CopyVertex, typename CopyEdge, typename IndexMap,
-        typename Orig2CopyVertexIndexMap>
-      static void apply(const Graph& g_in, MutableGraph& g_out, 
-                        CopyVertex copy_vertex, CopyEdge copy_edge,
-                        Orig2CopyVertexIndexMap orig2copy, IndexMap)
-      {
-        typedef remove_reverse_edge_descriptor<Graph, typename graph_traits<Graph>::edge_descriptor> cvt;
-        typename graph_traits<Graph>::vertex_iterator vi, vi_end;
-        for (boost::tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi) {
-          typename graph_traits<MutableGraph>::vertex_descriptor
-            new_v = add_vertex(g_out);
-          put(orig2copy, *vi, new_v);
-          copy_vertex(*vi, new_v);
-        }
-        typename graph_traits<Graph>::edge_iterator ei, ei_end;
-        for (boost::tie(ei, ei_end) = edges(g_in); ei != ei_end; ++ei) {
-          typename graph_traits<MutableGraph>::edge_descriptor new_e;
-          bool inserted;
-          boost::tie(new_e, inserted) = add_edge(get(orig2copy, source(*ei, g_in)), 
-                                                 get(orig2copy, target(*ei, g_in)),
-                                                 g_out);
-          copy_edge(cvt::convert(*ei, g_in), new_e);
+        template < typename Graph, typename MutableGraph, typename CopyVertex,
+            typename CopyEdge, typename IndexMap,
+            typename Orig2CopyVertexIndexMap >
+        static void apply(const Graph& g_in, MutableGraph& g_out,
+            CopyVertex copy_vertex, CopyEdge copy_edge,
+            Orig2CopyVertexIndexMap orig2copy, IndexMap)
+        {
+            typedef remove_reverse_edge_descriptor< Graph,
+                typename graph_traits< Graph >::edge_descriptor >
+                cvt;
+            typename graph_traits< Graph >::vertex_iterator vi, vi_end;
+            for (boost::tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi)
+            {
+                typename graph_traits< MutableGraph >::vertex_descriptor new_v
+                    = add_vertex(g_out);
+                put(orig2copy, *vi, new_v);
+                copy_vertex(*vi, new_v);
+            }
+            typename graph_traits< Graph >::edge_iterator ei, ei_end;
+            for (boost::tie(ei, ei_end) = edges(g_in); ei != ei_end; ++ei)
+            {
+                typename graph_traits< MutableGraph >::edge_descriptor new_e;
+                bool inserted;
+                boost::tie(new_e, inserted)
+                    = add_edge(get(orig2copy, source(*ei, g_in)),
+                        get(orig2copy, target(*ei, g_in)), g_out);
+                copy_edge(cvt::convert(*ei, g_in), new_e);
+            }
         }
-      }
     };
 
     // for directed graphs
-    template <> struct copy_graph_impl<1>
+    template <> struct copy_graph_impl< 1 >
     {
-      template <typename Graph, typename MutableGraph, 
-        typename CopyVertex, typename CopyEdge, typename IndexMap,
-        typename Orig2CopyVertexIndexMap>
-      static void apply(const Graph& g_in, MutableGraph& g_out, 
-                        CopyVertex copy_vertex, CopyEdge copy_edge,
-                        Orig2CopyVertexIndexMap orig2copy, IndexMap)
-      {
-        typedef remove_reverse_edge_descriptor<Graph, typename graph_traits<Graph>::edge_descriptor> cvt;
-        typename graph_traits<Graph>::vertex_iterator vi, vi_end;
-        for (boost::tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi) {
-          typename graph_traits<MutableGraph>::vertex_descriptor
-            new_v = add_vertex(g_out);
-          put(orig2copy, *vi, new_v);
-          copy_vertex(*vi, new_v);
-        }
-        for (boost::tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi) {
-          typename graph_traits<Graph>::out_edge_iterator ei, ei_end;
-          for (boost::tie(ei, ei_end) = out_edges(*vi, g_in); ei != ei_end; ++ei) {
-            typename graph_traits<MutableGraph>::edge_descriptor new_e;
-            bool inserted;
-            boost::tie(new_e, inserted) = add_edge(get(orig2copy, source(*ei, g_in)), 
-                                                   get(orig2copy, target(*ei, g_in)),
-                                                   g_out);
-            copy_edge(cvt::convert(*ei, g_in), new_e);
-          }
+        template < typename Graph, typename MutableGraph, typename CopyVertex,
+            typename CopyEdge, typename IndexMap,
+            typename Orig2CopyVertexIndexMap >
+        static void apply(const Graph& g_in, MutableGraph& g_out,
+            CopyVertex copy_vertex, CopyEdge copy_edge,
+            Orig2CopyVertexIndexMap orig2copy, IndexMap)
+        {
+            typedef remove_reverse_edge_descriptor< Graph,
+                typename graph_traits< Graph >::edge_descriptor >
+                cvt;
+            typename graph_traits< Graph >::vertex_iterator vi, vi_end;
+            for (boost::tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi)
+            {
+                typename graph_traits< MutableGraph >::vertex_descriptor new_v
+                    = add_vertex(g_out);
+                put(orig2copy, *vi, new_v);
+                copy_vertex(*vi, new_v);
+            }
+            for (boost::tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi)
+            {
+                typename graph_traits< Graph >::out_edge_iterator ei, ei_end;
+                for (boost::tie(ei, ei_end) = out_edges(*vi, g_in);
+                     ei != ei_end; ++ei)
+                {
+                    typename graph_traits< MutableGraph >::edge_descriptor
+                        new_e;
+                    bool inserted;
+                    boost::tie(new_e, inserted)
+                        = add_edge(get(orig2copy, source(*ei, g_in)),
+                            get(orig2copy, target(*ei, g_in)), g_out);
+                    copy_edge(cvt::convert(*ei, g_in), new_e);
+                }
+            }
         }
-      }
     };
 
     // for undirected graphs
-    template <> struct copy_graph_impl<2>
+    template <> struct copy_graph_impl< 2 >
     {
-      template <typename Graph, typename MutableGraph, 
-        typename CopyVertex, typename CopyEdge, typename IndexMap,
-        typename Orig2CopyVertexIndexMap>
-      static void apply(const Graph& g_in, MutableGraph& g_out, 
-                        CopyVertex copy_vertex, CopyEdge copy_edge,
-                        Orig2CopyVertexIndexMap orig2copy,
-                        IndexMap index_map)
-      {
-        typedef remove_reverse_edge_descriptor<Graph, typename graph_traits<Graph>::edge_descriptor> cvt;
-        typedef color_traits<default_color_type> Color;
-        std::vector<default_color_type> 
-          color(num_vertices(g_in), Color::white());
-        typename graph_traits<Graph>::vertex_iterator vi, vi_end;
-        for (boost::tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi) {
-          typename graph_traits<MutableGraph>::vertex_descriptor
-            new_v = add_vertex(g_out);
-          put(orig2copy, *vi, new_v);
-          copy_vertex(*vi, new_v);
-        }
-        for (boost::tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi) {
-          typename graph_traits<Graph>::out_edge_iterator ei, ei_end;
-          for (boost::tie(ei, ei_end) = out_edges(*vi, g_in); ei != ei_end; ++ei) {
-            typename graph_traits<MutableGraph>::edge_descriptor new_e;
-            bool inserted;
-            if (color[get(index_map, target(*ei, g_in))] == Color::white()) {
-              boost::tie(new_e, inserted) = add_edge(get(orig2copy, source(*ei,g_in)),
-                                                     get(orig2copy, target(*ei,g_in)),
-                                                     g_out);
-              copy_edge(cvt::convert(*ei, g_in), new_e);
+        template < typename Graph, typename MutableGraph, typename CopyVertex,
+            typename CopyEdge, typename IndexMap,
+            typename Orig2CopyVertexIndexMap >
+        static void apply(const Graph& g_in, MutableGraph& g_out,
+            CopyVertex copy_vertex, CopyEdge copy_edge,
+            Orig2CopyVertexIndexMap orig2copy, IndexMap index_map)
+        {
+            typedef remove_reverse_edge_descriptor< Graph,
+                typename graph_traits< Graph >::edge_descriptor >
+                cvt;
+            typedef color_traits< default_color_type > Color;
+            std::vector< default_color_type > color(
+                num_vertices(g_in), Color::white());
+            typename graph_traits< Graph >::vertex_iterator vi, vi_end;
+            for (boost::tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi)
+            {
+                typename graph_traits< MutableGraph >::vertex_descriptor new_v
+                    = add_vertex(g_out);
+                put(orig2copy, *vi, new_v);
+                copy_vertex(*vi, new_v);
+            }
+            for (boost::tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi)
+            {
+                typename graph_traits< Graph >::out_edge_iterator ei, ei_end;
+                for (boost::tie(ei, ei_end) = out_edges(*vi, g_in);
+                     ei != ei_end; ++ei)
+                {
+                    typename graph_traits< MutableGraph >::edge_descriptor
+                        new_e;
+                    bool inserted;
+                    if (color[get(index_map, target(*ei, g_in))]
+                        == Color::white())
+                    {
+                        boost::tie(new_e, inserted)
+                            = add_edge(get(orig2copy, source(*ei, g_in)),
+                                get(orig2copy, target(*ei, g_in)), g_out);
+                        copy_edge(cvt::convert(*ei, g_in), new_e);
+                    }
+                }
+                color[get(index_map, *vi)] = Color::black();
             }
-          }
-          color[get(index_map, *vi)] = Color::black();
         }
-      }
     };
 
-    template <class Graph>
-    struct choose_graph_copy {
-      typedef typename graph_traits<Graph>::traversal_category Trv;
-      typedef typename graph_traits<Graph>::directed_category Dr;
-      enum { algo = 
-             (is_convertible<Trv, vertex_list_graph_tag>::value
-              && is_convertible<Trv, edge_list_graph_tag>::value)
-             ? 0 : is_convertible<Dr, directed_tag>::value ? 1 : 2 };
-      typedef copy_graph_impl<algo> type;
+    template < class Graph > struct choose_graph_copy
+    {
+        typedef typename graph_traits< Graph >::traversal_category Trv;
+        typedef typename graph_traits< Graph >::directed_category Dr;
+        enum
+        {
+            algo = (is_convertible< Trv, vertex_list_graph_tag >::value
+                       && is_convertible< Trv, edge_list_graph_tag >::value)
+                ? 0
+                : is_convertible< Dr, directed_tag >::value ? 1 : 2
+        };
+        typedef copy_graph_impl< algo > type;
     };
 
     //-------------------------------------------------------------------------
-    struct choose_copier_parameter {
-      template <class P, class G1, class G2>
-      struct bind_ {
-        typedef const P& result_type;
-        static result_type apply(const P& p, const G1&, G2&)
-        { return p; }
-      };
+    struct choose_copier_parameter
+    {
+        template < class P, class G1, class G2 > struct bind_
+        {
+            typedef const P& result_type;
+            static result_type apply(const P& p, const G1&, G2&) { return p; }
+        };
     };
-    struct choose_default_edge_copier {
-      template <class P, class G1, class G2>
-      struct bind_ {
-        typedef edge_copier<G1, G2> result_type;
-        static result_type apply(const P&, const G1& g1, G2& g2) { 
-          return result_type(g1, g2);
-        }
-      };
+    struct choose_default_edge_copier
+    {
+        template < class P, class G1, class G2 > struct bind_
+        {
+            typedef edge_copier< G1, G2 > result_type;
+            static result_type apply(const P&, const G1& g1, G2& g2)
+            {
+                return result_type(g1, g2);
+            }
+        };
     };
-    template <class Param>
-    struct choose_edge_copy {
-      typedef choose_copier_parameter type;
+    template < class Param > struct choose_edge_copy
+    {
+        typedef choose_copier_parameter type;
     };
-    template <>
-    struct choose_edge_copy<param_not_found> {
-      typedef choose_default_edge_copier type;
+    template <> struct choose_edge_copy< param_not_found >
+    {
+        typedef choose_default_edge_copier type;
     };
-    template <class Param, class G1, class G2>
-    struct choose_edge_copier_helper {
-      typedef typename choose_edge_copy<Param>::type Selector;
-      typedef typename Selector:: template bind_<Param, G1, G2> Bind;
-      typedef Bind type;
-      typedef typename Bind::result_type result_type;
+    template < class Param, class G1, class G2 >
+    struct choose_edge_copier_helper
+    {
+        typedef typename choose_edge_copy< Param >::type Selector;
+        typedef typename Selector::template bind_< Param, G1, G2 > Bind;
+        typedef Bind type;
+        typedef typename Bind::result_type result_type;
     };
-    template <typename Param, typename G1, typename G2>
-    typename detail::choose_edge_copier_helper<Param,G1,G2>::result_type
+    template < typename Param, typename G1, typename G2 >
+    typename detail::choose_edge_copier_helper< Param, G1, G2 >::result_type
     choose_edge_copier(const Param& params, const G1& g_in, G2& g_out)
     {
-      typedef typename 
-        detail::choose_edge_copier_helper<Param,G1,G2>::type Choice;
-      return Choice::apply(params, g_in, g_out);
+        typedef
+            typename detail::choose_edge_copier_helper< Param, G1, G2 >::type
+                Choice;
+        return Choice::apply(params, g_in, g_out);
     }
 
-
-    struct choose_default_vertex_copier {
-      template <class P, class G1, class G2>
-      struct bind_ {
-        typedef vertex_copier<G1, G2> result_type;
-        static result_type apply(const P&, const G1& g1, G2& g2) { 
-          return result_type(g1, g2);
-        }
-      };
+    struct choose_default_vertex_copier
+    {
+        template < class P, class G1, class G2 > struct bind_
+        {
+            typedef vertex_copier< G1, G2 > result_type;
+            static result_type apply(const P&, const G1& g1, G2& g2)
+            {
+                return result_type(g1, g2);
+            }
+        };
     };
-    template <class Param>
-    struct choose_vertex_copy {
-      typedef choose_copier_parameter type;
+    template < class Param > struct choose_vertex_copy
+    {
+        typedef choose_copier_parameter type;
     };
-    template <>
-    struct choose_vertex_copy<param_not_found> {
-      typedef choose_default_vertex_copier type;
+    template <> struct choose_vertex_copy< param_not_found >
+    {
+        typedef choose_default_vertex_copier type;
     };
-    template <class Param, class G1, class G2>
-    struct choose_vertex_copier_helper {
-      typedef typename choose_vertex_copy<Param>::type Selector;
-      typedef typename Selector:: template bind_<Param, G1, G2> Bind;
-      typedef Bind type;
-      typedef typename Bind::result_type result_type;
+    template < class Param, class G1, class G2 >
+    struct choose_vertex_copier_helper
+    {
+        typedef typename choose_vertex_copy< Param >::type Selector;
+        typedef typename Selector::template bind_< Param, G1, G2 > Bind;
+        typedef Bind type;
+        typedef typename Bind::result_type result_type;
     };
-    template <typename Param, typename G1, typename G2>
-    typename detail::choose_vertex_copier_helper<Param,G1,G2>::result_type
+    template < typename Param, typename G1, typename G2 >
+    typename detail::choose_vertex_copier_helper< Param, G1, G2 >::result_type
     choose_vertex_copier(const Param& params, const G1& g_in, G2& g_out)
     {
-      typedef typename 
-        detail::choose_vertex_copier_helper<Param,G1,G2>::type Choice;
-      return Choice::apply(params, g_in, g_out);
+        typedef
+            typename detail::choose_vertex_copier_helper< Param, G1, G2 >::type
+                Choice;
+        return Choice::apply(params, g_in, g_out);
     }
 
-  } // namespace detail
-
+} // namespace detail
 
-  template <typename VertexListGraph, typename MutableGraph>
-  void copy_graph(const VertexListGraph& g_in, MutableGraph& g_out)
-  {
+template < typename VertexListGraph, typename MutableGraph >
+void copy_graph(const VertexListGraph& g_in, MutableGraph& g_out)
+{
     if (num_vertices(g_in) == 0)
-      return;
-    typedef typename graph_traits<MutableGraph>::vertex_descriptor vertex_t;
-    std::vector<vertex_t> orig2copy(num_vertices(g_in));
-    typedef typename detail::choose_graph_copy<VertexListGraph>::type 
-      copy_impl;
-    copy_impl::apply
-      (g_in, g_out, 
-       detail::make_vertex_copier(g_in, g_out), 
-       detail::make_edge_copier(g_in, g_out), 
-       make_iterator_property_map(orig2copy.begin(), 
-                                  get(vertex_index, g_in), orig2copy[0]),
-       get(vertex_index, g_in)
-       );
-  }
-
-  template <typename VertexListGraph, typename MutableGraph, 
-    class P, class T, class R>
-  void copy_graph(const VertexListGraph& g_in, MutableGraph& g_out, 
-                  const bgl_named_params<P, T, R>& params)
-  {
-    typename std::vector<T>::size_type n;
-      n = is_default_param(get_param(params, orig_to_copy_t()))
-        ? num_vertices(g_in) : 1;
+        return;
+    typedef typename graph_traits< MutableGraph >::vertex_descriptor vertex_t;
+    std::vector< vertex_t > orig2copy(num_vertices(g_in));
+    typedef
+        typename detail::choose_graph_copy< VertexListGraph >::type copy_impl;
+    copy_impl::apply(g_in, g_out, detail::make_vertex_copier(g_in, g_out),
+        detail::make_edge_copier(g_in, g_out),
+        make_iterator_property_map(
+            orig2copy.begin(), get(vertex_index, g_in), orig2copy[0]),
+        get(vertex_index, g_in));
+}
+
+template < typename VertexListGraph, typename MutableGraph, class P, class T,
+    class R >
+void copy_graph(const VertexListGraph& g_in, MutableGraph& g_out,
+    const bgl_named_params< P, T, R >& params)
+{
+    typename std::vector< T >::size_type n;
+    n = is_default_param(get_param(params, orig_to_copy_t()))
+        ? num_vertices(g_in)
+        : 1;
     if (n == 0)
-      return;
-    std::vector<BOOST_DEDUCED_TYPENAME graph_traits<MutableGraph>::vertex_descriptor> 
-      orig2copy(n);
-
-    typedef typename detail::choose_graph_copy<VertexListGraph>::type 
-      copy_impl;
-    copy_impl::apply
-      (g_in, g_out,
-       detail::choose_vertex_copier(get_param(params, vertex_copy_t()), 
-                                    g_in, g_out),
-       detail::choose_edge_copier(get_param(params, edge_copy_t()), 
-                                  g_in, g_out),
-       choose_param(get_param(params, orig_to_copy_t()),
-                    make_iterator_property_map
-                    (orig2copy.begin(), 
-                     choose_const_pmap(get_param(params, vertex_index), 
-                                 g_in, vertex_index), orig2copy[0])),
-       choose_const_pmap(get_param(params, vertex_index), g_in, vertex_index)
-       );
-  }
-
-  namespace detail {
-    
-    template <class NewGraph, class Copy2OrigIndexMap, 
-      class CopyVertex, class CopyEdge>
+        return;
+    std::vector<
+        BOOST_DEDUCED_TYPENAME graph_traits< MutableGraph >::vertex_descriptor >
+        orig2copy(n);
+
+    typedef
+        typename detail::choose_graph_copy< VertexListGraph >::type copy_impl;
+    copy_impl::apply(g_in, g_out,
+        detail::choose_vertex_copier(
+            get_param(params, vertex_copy_t()), g_in, g_out),
+        detail::choose_edge_copier(
+            get_param(params, edge_copy_t()), g_in, g_out),
+        choose_param(get_param(params, orig_to_copy_t()),
+            make_iterator_property_map(orig2copy.begin(),
+                choose_const_pmap(
+                    get_param(params, vertex_index), g_in, vertex_index),
+                orig2copy[0])),
+        choose_const_pmap(get_param(params, vertex_index), g_in, vertex_index));
+}
+
+namespace detail
+{
+
+    template < class NewGraph, class Copy2OrigIndexMap, class CopyVertex,
+        class CopyEdge >
     struct graph_copy_visitor : public bfs_visitor<>
     {
-      graph_copy_visitor(NewGraph& graph, Copy2OrigIndexMap c,
-                         CopyVertex cv, CopyEdge ce)
-        : g_out(graph), orig2copy(c), copy_vertex(cv), copy_edge(ce) { }
-
-      template <class Vertex>
-      typename graph_traits<NewGraph>::vertex_descriptor copy_one_vertex(Vertex u) const {
-        typename graph_traits<NewGraph>::vertex_descriptor
-          new_u = add_vertex(g_out);
-        put(orig2copy, u, new_u);
-        copy_vertex(u, new_u);
-        return new_u;
-      }
-      
-      template <class Edge, class Graph>
-      void tree_edge(Edge e, const Graph& g_in) const {
-        // For a tree edge, the target vertex has not been copied yet.
-        typename graph_traits<NewGraph>::edge_descriptor new_e;
-        bool inserted;
-        boost::tie(new_e, inserted) = add_edge(get(orig2copy, source(e, g_in)), 
-                                               this->copy_one_vertex(target(e, g_in)),
-                                               g_out);
-        copy_edge(e, new_e);
-      }
-      
-      template <class Edge, class Graph>
-      void non_tree_edge(Edge e, const Graph& g_in) const {
-        // For a non-tree edge, the target vertex has already been copied.
-        typename graph_traits<NewGraph>::edge_descriptor new_e;
-        bool inserted;
-        boost::tie(new_e, inserted) = add_edge(get(orig2copy, source(e, g_in)), 
-                                               get(orig2copy, target(e, g_in)),
-                                               g_out);
-        copy_edge(e, new_e);
-      }
+        graph_copy_visitor(
+            NewGraph& graph, Copy2OrigIndexMap c, CopyVertex cv, CopyEdge ce)
+        : g_out(graph), orig2copy(c), copy_vertex(cv), copy_edge(ce)
+        {
+        }
+
+        template < class Vertex >
+        typename graph_traits< NewGraph >::vertex_descriptor copy_one_vertex(
+            Vertex u) const
+        {
+            typename graph_traits< NewGraph >::vertex_descriptor new_u
+                = add_vertex(g_out);
+            put(orig2copy, u, new_u);
+            copy_vertex(u, new_u);
+            return new_u;
+        }
+
+        template < class Edge, class Graph >
+        void tree_edge(Edge e, const Graph& g_in) const
+        {
+            // For a tree edge, the target vertex has not been copied yet.
+            typename graph_traits< NewGraph >::edge_descriptor new_e;
+            bool inserted;
+            boost::tie(new_e, inserted)
+                = add_edge(get(orig2copy, source(e, g_in)),
+                    this->copy_one_vertex(target(e, g_in)), g_out);
+            copy_edge(e, new_e);
+        }
+
+        template < class Edge, class Graph >
+        void non_tree_edge(Edge e, const Graph& g_in) const
+        {
+            // For a non-tree edge, the target vertex has already been copied.
+            typename graph_traits< NewGraph >::edge_descriptor new_e;
+            bool inserted;
+            boost::tie(new_e, inserted)
+                = add_edge(get(orig2copy, source(e, g_in)),
+                    get(orig2copy, target(e, g_in)), g_out);
+            copy_edge(e, new_e);
+        }
+
     private:
-      NewGraph& g_out;
-      Copy2OrigIndexMap orig2copy;
-      CopyVertex copy_vertex;
-      CopyEdge copy_edge;
+        NewGraph& g_out;
+        Copy2OrigIndexMap orig2copy;
+        CopyVertex copy_vertex;
+        CopyEdge copy_edge;
     };
 
-    template <typename Graph, typename MutableGraph, 
-              typename CopyVertex, typename CopyEdge, 
-              typename Orig2CopyVertexIndexMap, typename Params>
-    typename graph_traits<MutableGraph>::vertex_descriptor
-    copy_component_impl
-      (const Graph& g_in, 
-       typename graph_traits<Graph>::vertex_descriptor src,
-       MutableGraph& g_out, 
-       CopyVertex copy_vertex, CopyEdge copy_edge,
-       Orig2CopyVertexIndexMap orig2copy,
-       const Params& params)
+    template < typename Graph, typename MutableGraph, typename CopyVertex,
+        typename CopyEdge, typename Orig2CopyVertexIndexMap, typename Params >
+    typename graph_traits< MutableGraph >::vertex_descriptor
+    copy_component_impl(const Graph& g_in,
+        typename graph_traits< Graph >::vertex_descriptor src,
+        MutableGraph& g_out, CopyVertex copy_vertex, CopyEdge copy_edge,
+        Orig2CopyVertexIndexMap orig2copy, const Params& params)
     {
-      graph_copy_visitor<MutableGraph, Orig2CopyVertexIndexMap, 
-        CopyVertex, CopyEdge> vis(g_out, orig2copy, copy_vertex, copy_edge);
-      typename graph_traits<MutableGraph>::vertex_descriptor src_copy
-        = vis.copy_one_vertex(src);
-      breadth_first_search(g_in, src, params.visitor(vis));
-      return src_copy;
+        graph_copy_visitor< MutableGraph, Orig2CopyVertexIndexMap, CopyVertex,
+            CopyEdge >
+            vis(g_out, orig2copy, copy_vertex, copy_edge);
+        typename graph_traits< MutableGraph >::vertex_descriptor src_copy
+            = vis.copy_one_vertex(src);
+        breadth_first_search(g_in, src, params.visitor(vis));
+        return src_copy;
     }
 
-  } // namespace detail
-  
-  
-  // Copy all the vertices and edges of graph g_in that are reachable
-  // from the source vertex into graph g_out. Return the vertex
-  // in g_out that matches the source vertex of g_in.
-  template <typename IncidenceGraph, typename MutableGraph, 
-           typename P, typename T, typename R>
-  typename graph_traits<MutableGraph>::vertex_descriptor
-  copy_component(IncidenceGraph& g_in, 
-                 typename graph_traits<IncidenceGraph>::vertex_descriptor src,
-                 MutableGraph& g_out, 
-                 const bgl_named_params<P, T, R>& params)
-  {
-    typename std::vector<T>::size_type n;
-      n = is_default_param(get_param(params, orig_to_copy_t()))
-        ? num_vertices(g_in) : 1;
-    std::vector<typename graph_traits<IncidenceGraph>::vertex_descriptor> 
-      orig2copy(n);
-    
-    return detail::copy_component_impl
-      (g_in, src, g_out,
-       detail::choose_vertex_copier(get_param(params, vertex_copy_t()), 
-                                    g_in, g_out),
-       detail::choose_edge_copier(get_param(params, edge_copy_t()), 
-                                  g_in, g_out),
-       choose_param(get_param(params, orig_to_copy_t()),
-                    make_iterator_property_map
-                    (orig2copy.begin(), 
-                     choose_pmap(get_param(params, vertex_index), 
-                                 g_in, vertex_index), orig2copy[0])),
-       params
-       );
-  }
-
-  template <typename IncidenceGraph, typename MutableGraph>
-  typename graph_traits<MutableGraph>::vertex_descriptor
-  copy_component(IncidenceGraph& g_in, 
-                 typename graph_traits<IncidenceGraph>::vertex_descriptor src,
-                 MutableGraph& g_out)
-  {
-    std::vector<typename graph_traits<IncidenceGraph>::vertex_descriptor> 
-      orig2copy(num_vertices(g_in));
-    
-    return detail::copy_component_impl
-      (g_in, src, g_out,
-       make_vertex_copier(g_in, g_out), 
-       make_edge_copier(g_in, g_out), 
-       make_iterator_property_map(orig2copy.begin(), 
-                                  get(vertex_index, g_in), orig2copy[0]),
-       bgl_named_params<char,char>('x') // dummy param object
-       );
-  }
+} // namespace detail
+
+// Copy all the vertices and edges of graph g_in that are reachable
+// from the source vertex into graph g_out. Return the vertex
+// in g_out that matches the source vertex of g_in.
+template < typename IncidenceGraph, typename MutableGraph, typename P,
+    typename T, typename R >
+typename graph_traits< MutableGraph >::vertex_descriptor copy_component(
+    IncidenceGraph& g_in,
+    typename graph_traits< IncidenceGraph >::vertex_descriptor src,
+    MutableGraph& g_out, const bgl_named_params< P, T, R >& params)
+{
+    typename std::vector< T >::size_type n;
+    n = is_default_param(get_param(params, orig_to_copy_t()))
+        ? num_vertices(g_in)
+        : 1;
+    std::vector< typename graph_traits< IncidenceGraph >::vertex_descriptor >
+        orig2copy(n);
+
+    return detail::copy_component_impl(g_in, src, g_out,
+        detail::choose_vertex_copier(
+            get_param(params, vertex_copy_t()), g_in, g_out),
+        detail::choose_edge_copier(
+            get_param(params, edge_copy_t()), g_in, g_out),
+        choose_param(get_param(params, orig_to_copy_t()),
+            make_iterator_property_map(orig2copy.begin(),
+                choose_pmap(
+                    get_param(params, vertex_index), g_in, vertex_index),
+                orig2copy[0])),
+        params);
+}
+
+template < typename IncidenceGraph, typename MutableGraph >
+typename graph_traits< MutableGraph >::vertex_descriptor copy_component(
+    IncidenceGraph& g_in,
+    typename graph_traits< IncidenceGraph >::vertex_descriptor src,
+    MutableGraph& g_out)
+{
+    std::vector< typename graph_traits< IncidenceGraph >::vertex_descriptor >
+        orig2copy(num_vertices(g_in));
+
+    return detail::copy_component_impl(g_in, src, g_out,
+        make_vertex_copier(g_in, g_out), make_edge_copier(g_in, g_out),
+        make_iterator_property_map(
+            orig2copy.begin(), get(vertex_index, g_in), orig2copy[0]),
+        bgl_named_params< char, char >('x') // dummy param object
+    );
+}
 
 } // namespace boost