| ... | ... |
@@ -593,25 +593,25 @@ |
| 593 | 593 |
}; |
| 594 | 594 |
|
| 595 | 595 |
template <typename Digraph, typename Enable = void> |
| 596 | 596 |
struct DigraphCopySelector {
|
| 597 | 597 |
template <typename From, typename NodeRefMap, typename ArcRefMap> |
| 598 | 598 |
static void copy(Digraph &to, const From& from, |
| 599 | 599 |
NodeRefMap& nodeRefMap, ArcRefMap& arcRefMap) {
|
| 600 | 600 |
for (typename From::NodeIt it(from); it != INVALID; ++it) {
|
| 601 | 601 |
nodeRefMap[it] = to.addNode(); |
| 602 | 602 |
} |
| 603 | 603 |
for (typename From::ArcIt it(from); it != INVALID; ++it) {
|
| 604 | 604 |
arcRefMap[it] = to.addArc(nodeRefMap[from.source(it)], |
| 605 |
|
|
| 605 |
nodeRefMap[from.target(it)]); |
|
| 606 | 606 |
} |
| 607 | 607 |
} |
| 608 | 608 |
}; |
| 609 | 609 |
|
| 610 | 610 |
template <typename Digraph> |
| 611 | 611 |
struct DigraphCopySelector< |
| 612 | 612 |
Digraph, |
| 613 | 613 |
typename enable_if<typename Digraph::BuildTag, void>::type> |
| 614 | 614 |
{
|
| 615 | 615 |
template <typename From, typename NodeRefMap, typename ArcRefMap> |
| 616 | 616 |
static void copy(Digraph &to, const From& from, |
| 617 | 617 |
NodeRefMap& nodeRefMap, ArcRefMap& arcRefMap) {
|
| ... | ... |
@@ -619,26 +619,26 @@ |
| 619 | 619 |
} |
| 620 | 620 |
}; |
| 621 | 621 |
|
| 622 | 622 |
template <typename Graph, typename Enable = void> |
| 623 | 623 |
struct GraphCopySelector {
|
| 624 | 624 |
template <typename From, typename NodeRefMap, typename EdgeRefMap> |
| 625 | 625 |
static void copy(Graph &to, const From& from, |
| 626 | 626 |
NodeRefMap& nodeRefMap, EdgeRefMap& edgeRefMap) {
|
| 627 | 627 |
for (typename From::NodeIt it(from); it != INVALID; ++it) {
|
| 628 | 628 |
nodeRefMap[it] = to.addNode(); |
| 629 | 629 |
} |
| 630 | 630 |
for (typename From::EdgeIt it(from); it != INVALID; ++it) {
|
| 631 |
edgeRefMap[it] = to.addArc(nodeRefMap[from.source(it)], |
|
| 632 |
nodeRefMap[from.target(it)]); |
|
| 631 |
edgeRefMap[it] = to.addEdge(nodeRefMap[from.u(it)], |
|
| 632 |
nodeRefMap[from.v(it)]); |
|
| 633 | 633 |
} |
| 634 | 634 |
} |
| 635 | 635 |
}; |
| 636 | 636 |
|
| 637 | 637 |
template <typename Graph> |
| 638 | 638 |
struct GraphCopySelector< |
| 639 | 639 |
Graph, |
| 640 | 640 |
typename enable_if<typename Graph::BuildTag, void>::type> |
| 641 | 641 |
{
|
| 642 | 642 |
template <typename From, typename NodeRefMap, typename EdgeRefMap> |
| 643 | 643 |
static void copy(Graph &to, const From& from, |
| 644 | 644 |
NodeRefMap& nodeRefMap, EdgeRefMap& edgeRefMap) {
|
| ... | ... |
@@ -916,27 +916,28 @@ |
| 916 | 916 |
typedef typename From::template EdgeMap<TEdge> EdgeRefMap; |
| 917 | 917 |
|
| 918 | 918 |
struct ArcRefMap {
|
| 919 | 919 |
ArcRefMap(const To& to, const From& from, |
| 920 | 920 |
const EdgeRefMap& edge_ref, const NodeRefMap& node_ref) |
| 921 | 921 |
: _to(to), _from(from), |
| 922 | 922 |
_edge_ref(edge_ref), _node_ref(node_ref) {}
|
| 923 | 923 |
|
| 924 | 924 |
typedef typename From::Arc Key; |
| 925 | 925 |
typedef typename To::Arc Value; |
| 926 | 926 |
|
| 927 | 927 |
Value operator[](const Key& key) const {
|
| 928 |
bool forward = |
|
| 929 |
(_from.direction(key) == |
|
| 930 |
|
|
| 928 |
bool forward = _from.u(key) != _from.v(key) ? |
|
| 929 |
_node_ref[_from.source(key)] == |
|
| 930 |
_to.source(_to.direct(_edge_ref[key], true)) : |
|
| 931 |
_from.direction(key); |
|
| 931 | 932 |
return _to.direct(_edge_ref[key], forward); |
| 932 | 933 |
} |
| 933 | 934 |
|
| 934 | 935 |
const To& _to; |
| 935 | 936 |
const From& _from; |
| 936 | 937 |
const EdgeRefMap& _edge_ref; |
| 937 | 938 |
const NodeRefMap& _node_ref; |
| 938 | 939 |
}; |
| 939 | 940 |
|
| 940 | 941 |
|
| 941 | 942 |
public: |
| 942 | 943 |
|
0 comments (0 inline)