ROSE 2.1.0
Loading...
Searching...
No Matches
SawyerGraphConnection.h
1#include "RoseFirst.h"
2#include "FlowGraphInterface.h"
3#include <Sawyer/Graph.h>
4
5#ifndef ROSE_SawyerGraphConnection_H
6#define ROSE_SawyerGraphConnection_H
7
8namespace Rose {
9namespace FlowGraphInterface {
10
11template <class NodeInfo, class EdgeInfo>
13 : public Sawyer::Container::Graph<NodeInfo, EdgeInfo>,
15 typename Sawyer::Container::Graph<NodeInfo,EdgeInfo>::ConstVertexIterator,
16 typename Sawyer::Container::Graph<NodeInfo,EdgeInfo>::ConstEdgeIterator, NodeInfo, EdgeInfo> {
17 public:
21 typedef typename boost::iterator_range<EdgeIterator> EdgeCollectionType;
22 typedef typename boost::iterator_range<NodeIterator> NodeCollectionType;
26 using typename FlowGraphInterfaceType::NodePredicate;
27 using typename FlowGraphInterfaceType::EdgePredicate;
28
29 virtual NodeCollectionType getNodes(NodePredicate = noFilter<NodeIterator>() ) const override
31 virtual EdgeCollectionType getEdges(EdgePredicate = noFilter<EdgeIterator>()) const override
33
34 virtual const NodeInfo& dereferenceNode(const NodeIterator& p) const { return (*p).value(); }
35 virtual const EdgeInfo& dereferenceEdge(const EdgeIterator& p) const { return (*p).value(); }
36
37 virtual NodeIterator edgeSource(const EdgeIterator& p) const override
38 { return (*p).source(); }
39 virtual NodeIterator edgeTarget(const EdgeIterator& p) const override
40 { return (*p).target(); }
41
42 virtual EdgeCollectionType getEdgesFrom(const NodeIterator& p, EdgePredicate = noFilter<EdgeIterator>()) const override {
43 return (*p).outEdges(); }
44 virtual EdgeCollectionType getEdgesTo(const NodeIterator& p, EdgePredicate = noFilter<EdgeIterator>()) const override {
45 return (*p).inEdges(); }
46
47 virtual NodeIterator addNode(const NodeInfo& node) override
48 { return SawyerBase::insertVertex(node); }
49 virtual EdgeIterator addEdge(const NodeIterator& p1, const NodeIterator& p2,
50 const EdgeInfo& t) override
51 { return SawyerBase::insertEdge(p1, p2, t); }
52 };
53}; // ROSE_FlowGraphInterface
54}; // Rose
55
56#endif
Bidirectional edge node iterator.
Definition Graph.h:956
Bidirectional vertex node iterator.
Definition Graph.h:1057
Graph containing user-defined vertices and edges.
Definition Graph.h:634
EdgeIterator insertEdge(const VertexIterator &sourceVertex, const VertexIterator &targetVertex, const EdgeValue &value=EdgeValue())
Insert a new edge.
Definition Graph.h:1820
boost::iterator_range< EdgeIterator > edges()
Iterators for all edges.
Definition Graph.h:1647
boost::iterator_range< VertexIterator > vertices()
Iterators for all vertices.
Definition Graph.h:1538
VertexIterator insertVertex(const VertexValue &value=VertexValue())
Insert a new vertex.
Definition Graph.h:1790
The ROSE library.