inline typename graph_traits<Graph>::vertex_descriptor create_root( Graph& g) { if(num_vertices(g) > 0) remove_branch(get_root_vertex(g), g); return add_vertex(g); };
inline typename graph_traits<Graph>::vertex_descriptor create_root( typename Graph::vertex_bundled&& vp, Graph& g) { if(num_vertices(g) > 0) remove_branch(get_root_vertex(g), g); return add_vertex(std::move(vp),g); };
typename boost::graph_traits<Graph>::vertex_descriptor rrt_get_or_create_root(Graph& g, const Topology& space, RRTVisitor vis, RandomSampler get_sample, PositionMap position) { typedef typename boost::property_traits<PositionMap>::value_type PositionValue; typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex; typedef typename Graph::vertex_bundled VertexProp; if(num_vertices(g) == 0) { PositionValue p = get_sample(space); while(!vis.is_position_free(p)) p = get_sample(space); VertexProp up; put(position, up, p); #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES Vertex u = create_root(std::move(up),g); #else Vertex u = create_root(up,g); #endif vis.vertex_added(u, g); return u; } else { return get_root_vertex(g); }; };