1#ifndef FPMAS_GRAPH_BUILDER_H
2#define FPMAS_GRAPH_BUILDER_H
13namespace fpmas {
namespace graph {
96 new_node->setLocation(location);
111 std::vector<api::graph::DistributedNode<T>*> base_nodes;
116 std::function<std::size_t(std::size_t)> index;
133 template<
typename Generator_t,
typename EdgeDist>
135 Generator_t& generator,
136 EdgeDist& edge_distribution,
139 base_nodes(base_nodes),
140 index([&generator] (std::size_t max) {
144 return index(generator);
161 std::vector<api::graph::DistributedNode<T>*>
build(
172 std::vector<api::graph::DistributedNode<T>*> built_nodes;
175 auto* node = node_builder.
buildNode(graph);
176 built_nodes.push_back(node);
177 std::size_t out_neighbors_count = std::min(
181 for(std::size_t i = 0; i < out_neighbors_count; i++) {
182 auto& target_node = base_nodes[this->index(base_nodes.size()-1-i)];
183 graph.
link(node, target_node, layer);
185 std::swap(target_node, base_nodes[base_nodes.size()-1-i]);
Definition: communication.h:251
virtual int getRank() const =0
virtual int getSize() const =0
Definition: distributed_graph.h:169
virtual DistributedEdge< T > * link(DistributedNode< T > *source, DistributedNode< T > *target, LayerId layer_id)=0
virtual DistributedNode< T > * insertDistant(DistributedNode< T > *node)=0
virtual DistributedNode< T > * buildNode(T &&data)=0
Definition: distributed_id.h:89
Definition: graph_builder.h:89
Definition: distributed_node.h:28
Definition: graph_builder.h:54
Definition: graph_builder.h:23
virtual std::size_t nodeCount()=0
virtual DistributedNode< T > * buildNode(DistributedGraph< T > &graph)=0
Definition: graph_builder.h:109
std::vector< api::graph::DistributedNode< T > * > build(api::graph::NodeBuilder< T > &node_builder, api::graph::LayerId layer, api::graph::DistributedGraph< T > &graph) override
Definition: graph_builder.h:168
BipartiteGraphBuilder(Generator_t &generator, EdgeDist &edge_distribution, std::vector< api::graph::DistributedNode< T > * > base_nodes)
Definition: graph_builder.h:134
Definition: graph_builder.h:75
fpmas::api::graph::DistributedNode< int > * buildDistantNode(fpmas::api::graph::DistributedId id, int location, fpmas::api::graph::DistributedGraph< int > &graph) override
Definition: graph_builder.h:91
fpmas::api::graph::DistributedNode< int > * buildNode(fpmas::api::graph::DistributedGraph< int > &graph) override
Definition: graph_builder.h:82
Definition: graph_builder.h:24
std::size_t nodeCount() override
Definition: graph_builder.h:55
std::size_t local_node_count
Definition: graph_builder.h:30
DistributedNodeBuilder(std::size_t node_count, fpmas::api::communication::MpiCommunicator &comm)
Definition: graph_builder.h:44
std::size_t localNodeCount() override
Definition: graph_builder.h:62
Definition: distributed_node.h:25
Definition: random_graph_builder.h:19
Definition: distribution.h:24
int LayerId
Definition: edge.h:13
std::size_t node_count(api::graph::DistributedGraph< T > &graph)
Definition: analysis.h:25