fpmas 1.6
distributed_graph.h
Go to the documentation of this file.
1#ifndef FPMAS_DISTRIBUTED_GRAPH_API_H
2#define FPMAS_DISTRIBUTED_GRAPH_API_H
3
12
13namespace fpmas {namespace api {namespace graph {
14
18 template<typename T>
19 struct NodeEvent {
24
29 }
30 };
31
41 template<typename T>
42 struct SetLocalNodeEvent : public NodeEvent<T> {
46 enum Context {
72 };
73
78
85 ) : NodeEvent<T>(node), context(context) {
86 }
87 };
88
98 template<typename T>
99 struct SetDistantNodeEvent : public NodeEvent<T> {
103 enum Context {
121
122 };
123
128
135 ) : NodeEvent<T>(node), context(context) {
136 }
137 };
138
167 template<typename T>
169 : public virtual fpmas::api::graph::Graph<DistributedNode<T>, DistributedEdge<T>> {
170 public:
173
182
183 public:
190
195
207
211 virtual const LocationManager<T>& getLocationManager() const = 0;
212
228
269
291 virtual std::unordered_set<DistributedNode<T>*> getUnsyncNodes() const = 0;
292
301 virtual DistributedId currentNodeId() const = 0;
302
308 virtual void setCurrentNodeId(DistributedId id) = 0;
309
318 virtual DistributedId currentEdgeId() const = 0;
319
325 virtual void setCurrentEdgeId(DistributedId id) = 0;
326
338 virtual DistributedNode<T>* buildNode(T&& data) = 0;
339
351 virtual DistributedNode<T>* buildNode(const T& data) = 0;
352
392
414 virtual void removeNode(DistributedNode<T>* node) = 0;
426 virtual void removeNode(DistributedId id) = 0;
427
448 virtual void unlink(DistributedEdge<T>* edge) = 0;
460 virtual void unlink(DistributedId id) = 0;
461
490 DistributedNode<T>* source, DistributedNode<T>* target,
491 LayerId layer_id) = 0;
492
504 virtual void switchLayer(DistributedEdge<T>* edge, LayerId layer_id) = 0;
505
515 virtual void addCallOnSetLocal(SetLocalNodeCallback* callback) = 0;
516
522 virtual std::vector<SetLocalNodeCallback*> onSetLocalCallbacks() const = 0;
523
536 virtual void addCallOnSetDistant(SetDistantNodeCallback* callback) = 0;
537
543 virtual std::vector<SetDistantNodeCallback*> onSetDistantCallbacks() const = 0;
544
545
550 HEDLEY_DEPRECATED_FOR(1.2, balance(LoadBalancing<T>&, PartitionMode))
551 virtual void balance(LoadBalancing<T>& lb) = 0;
552
563 virtual void balance(LoadBalancing<T>& lb, PartitionMode partition_mode) = 0;
564
565
570 HEDLEY_DEPRECATED_FOR(1.2, balance(FixedVerticesLoadBalancing<T>&, PartitionMap, PartitionMode))
571 virtual void balance(
573 PartitionMap fixed_vertices) = 0;
574
586 virtual void balance(
588 PartitionMap fixed_vertices,
589 PartitionMode partition_mode) = 0;
590
606 virtual void distribute(PartitionMap partition) = 0;
607
636 virtual void synchronize() = 0;
637
660 virtual void synchronize(
661 std::unordered_set<DistributedNode<T>*> nodes,
662 bool synchronize_links = true
663 ) = 0;
664
665
676 virtual synchro::SyncMode<T>& synchronizationMode() = 0;
677 };
678}}}
679#endif
Definition: communication.h:251
Definition: distributed_edge.h:91
Definition: distributed_graph.h:169
virtual void removeNode(DistributedNode< T > *node)=0
virtual const LocationManager< T > & getLocationManager() const =0
virtual api::communication::MpiCommunicator & getMpiCommunicator()=0
api::utils::EventCallback< SetDistantNodeEvent< T > > SetDistantNodeCallback
Definition: distributed_graph.h:181
virtual void distribute(PartitionMap partition)=0
virtual DistributedEdge< T > * importEdge(DistributedEdge< T > *edge)=0
virtual void addCallOnSetDistant(SetDistantNodeCallback *callback)=0
virtual DistributedId currentEdgeId() const =0
virtual void addCallOnSetLocal(SetLocalNodeCallback *callback)=0
virtual DistributedId currentNodeId() const =0
virtual void setCurrentNodeId(DistributedId id)=0
virtual void removeNode(DistributedId id)=0
virtual synchro::SyncMode< T > & synchronizationMode()=0
virtual void balance(LoadBalancing< T > &lb)=0
virtual DistributedEdge< T > * link(DistributedNode< T > *source, DistributedNode< T > *target, LayerId layer_id)=0
virtual void unlink(DistributedId id)=0
virtual DistributedNode< T > * buildNode(const T &data)=0
virtual std::vector< SetDistantNodeCallback * > onSetDistantCallbacks() const =0
virtual void switchLayer(DistributedEdge< T > *edge, LayerId layer_id)=0
virtual const api::communication::MpiCommunicator & getMpiCommunicator() const =0
virtual DistributedNode< T > * insertDistant(DistributedNode< T > *node)=0
virtual DistributedNode< T > * importNode(DistributedNode< T > *node)=0
virtual void unlink(DistributedEdge< T > *edge)=0
virtual DistributedNode< T > * buildNode(T &&data)=0
virtual std::unordered_set< DistributedNode< T > * > getUnsyncNodes() const =0
virtual void setCurrentEdgeId(DistributedId id)=0
api::utils::EventCallback< SetLocalNodeEvent< T > > SetLocalNodeCallback
Definition: distributed_graph.h:177
virtual LocationManager< T > & getLocationManager()=0
virtual std::vector< SetLocalNodeCallback * > onSetLocalCallbacks() const =0
Definition: distributed_id.h:89
Definition: distributed_node.h:28
Definition: load_balancing.h:47
Definition: graph.h:21
std::unordered_map< EdgeIdType, DistributedEdge< T > *, EdgeIdHash > EdgeMap
Definition: graph.h:56
std::unordered_map< NodeIdType, DistributedNode< T > *, NodeIdHash > NodeMap
Definition: graph.h:50
Definition: load_balancing.h:92
Definition: location_manager.h:34
std::unordered_map< DistributedId, int, api::graph::IdHash< DistributedId > > PartitionMap
Definition: load_balancing.h:19
int LayerId
Definition: edge.h:13
PartitionMode
Definition: load_balancing.h:30
Definition: fpmas.cpp:3
Definition: distributed_graph.h:19
DistributedNode< T > * node
Definition: distributed_graph.h:23
NodeEvent(DistributedNode< T > *node)
Definition: distributed_graph.h:28
Definition: distributed_graph.h:99
Context context
Definition: distributed_graph.h:127
Context
Definition: distributed_graph.h:103
@ EXPORT_DISTANT
Definition: distributed_graph.h:114
@ UNSPECIFIED
Definition: distributed_graph.h:120
@ IMPORT_NEW_DISTANT
Definition: distributed_graph.h:108
Definition: distributed_graph.h:42
Context
Definition: distributed_graph.h:46
@ UNSPECIFIED
Definition: distributed_graph.h:71
@ IMPORT_EXISTING_LOCAL
Definition: distributed_graph.h:65
@ BUILD_LOCAL
Definition: distributed_graph.h:51
@ IMPORT_NEW_LOCAL
Definition: distributed_graph.h:56
Context context
Definition: distributed_graph.h:77
Definition: callback.h:33