1#ifndef FPMAS_GRAPH_BUILDER_H
2#define FPMAS_GRAPH_BUILDER_H
12namespace fpmas {
namespace graph {
44 std::size_t node_count,
77 std::vector<api::graph::DistributedNode<T>*> base_nodes;
82 std::function<std::size_t(std::size_t)> index;
99 template<
typename Generator_t,
typename EdgeDist>
101 Generator_t& generator,
102 EdgeDist& edge_distribution,
105 base_nodes(base_nodes),
106 index([&generator] (std::size_t max) {
110 return index(generator);
127 std::vector<api::graph::DistributedNode<T>*>
build(
138 std::vector<api::graph::DistributedNode<T>*> built_nodes;
141 auto* node = node_builder.
buildNode(graph);
142 built_nodes.push_back(node);
143 std::size_t out_neighbors_count = std::min(
147 for(std::size_t i = 0; i < out_neighbors_count; i++) {
148 auto& target_node = base_nodes[this->index(base_nodes.size()-1-i)];
149 graph.
link(node, target_node, layer);
151 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
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:75
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:134
BipartiteGraphBuilder(Generator_t &generator, EdgeDist &edge_distribution, std::vector< api::graph::DistributedNode< T > * > base_nodes)
Definition: graph_builder.h:100
Definition: graph_builder.h:23
std::size_t nodeCount() override
Definition: graph_builder.h:54
std::size_t local_node_count
Definition: graph_builder.h:29
DistributedNodeBuilder(std::size_t node_count, fpmas::api::communication::MpiCommunicator &comm)
Definition: graph_builder.h:43
std::size_t localNodeCount() override
Definition: graph_builder.h:61
Definition: random_graph_builder.h:19
Definition: distribution.h:24
int LayerId
Definition: edge.h:13