void create_from_graph(const graph<VertexData, EdgeData> &g, const std::vector<vertex_id_type> &partids) { clear(); size_t nv = g.num_vertices(); logger(LOG_WARNING, "storing vertices..."); #pragma omp parallel for for (int i = 0;i < (int)nv; ++i) { vertex_id_type vid = i; size_t hashloc = (vid) % atoms.size(); //place vertices sequentially uint16_t owner = partids[i] % atoms.size(); atoms[hashloc]->set_owner(vid, owner); atoms[owner]->add_vertex(vid, owner, g.vertex_data(i)); atoms[owner]->set_color(vid, g.color(vid)); } logger(LOG_WARNING, "storing edges..."); #pragma omp parallel for for (int i = 0;i < (int)(g.num_edges()); ++i) { vertex_id_type target = g.target(i); vertex_id_type source = g.source(i); uint16_t sourceowner = partids[source] % atoms.size(); uint16_t targetowner = partids[target] % atoms.size(); if (sourceowner != targetowner) atoms[sourceowner]->add_edge(source, sourceowner, target, targetowner); atoms[targetowner]->add_edge(source, sourceowner, target, targetowner, g.edge_data(i)); } numv.value = g.num_vertices(); nume.value = g.num_edges(); finalize(); }
stats_t(graph& g):searchtree_nodes(0), searchtree_depth(0){ input_vertices = g.vertices.size(); input_edges = g.num_edges(); input_FES = get_FES(g); }