--- subgraph.hpp.orig 2014-06-27 13:49:35.000000000 +0400 +++ subgraph.hpp.add_vertex.patched.reconst 2014-10-28 20:10:00.000000000 +0300 @@ -144,12 +144,12 @@ typename subgraph::children_iterator i,i_end; boost::tie(i,i_end) = x.children(); for(; i != i_end; ++i) - { + { subgraph child = this->create_subgraph(); child = *i; - vertex_iterator vi,vi_end; + vertex_iterator vi,vi_end; boost::tie(vi,vi_end) = vertices(*i); - for (;vi!=vi_end;++vi) + for (;vi!=vi_end;++vi) { add_vertex(*vi,child); } @@ -721,14 +721,15 @@ namespace detail { template typename subgraph::vertex_descriptor - add_vertex_recur_up(subgraph& g) + add_vertex_recur_up(const typename G::vertex_property_type& p, + subgraph& g) { typename subgraph::vertex_descriptor u_local, u_global; if (g.is_root()) { - u_global = add_vertex(g.m_graph); + u_global = add_vertex(p, g.m_graph); g.m_global_vertex.push_back(u_global); } else { - u_global = add_vertex_recur_up(*g.m_parent); + u_global = add_vertex_recur_up(p, *g.m_parent); u_local = add_vertex(g.m_graph); g.m_global_vertex.push_back(u_global); g.m_local_vertex[u_global] = u_local; @@ -747,7 +748,7 @@ g.m_global_vertex.push_back(u_global); u_local = u_global; } else { - u_global = detail::add_vertex_recur_up(g.parent()); + u_global = detail::add_vertex_recur_up(typename G::vertex_property_type(), g.parent()); u_local = add_vertex(g.m_graph); g.m_global_vertex.push_back(u_global); g.m_local_vertex[u_global] = u_local; @@ -755,6 +756,18 @@ return u_local; } +template +typename subgraph::vertex_descriptor +add_vertex(const typename G::vertex_property_type& p, subgraph& g) +{ + typename subgraph::vertex_descriptor u_local, u_global; + + u_global = detail::add_vertex_recur_up(p, g); + u_local = g.global_to_local(u_global); + + return u_local; +} + #if 0 // TODO: Under Construction