... | ... |
@@ -67,21 +67,21 @@ |
67 | 67 |
/// \brief Template copy constructor |
68 | 68 |
/// |
69 | 69 |
/// This constuctor initializes the path from any other path type. |
70 | 70 |
/// It simply makes a copy of the given path. |
71 | 71 |
template <typename CPath> |
72 | 72 |
Path(const CPath& cpath) { |
73 |
|
|
73 |
pathCopy(cpath, *this); |
|
74 | 74 |
} |
75 | 75 |
|
76 | 76 |
/// \brief Template copy assignment |
77 | 77 |
/// |
78 | 78 |
/// This operator makes a copy of a path of any other type. |
79 | 79 |
template <typename CPath> |
80 | 80 |
Path& operator=(const CPath& cpath) { |
81 |
|
|
81 |
pathCopy(cpath, *this); |
|
82 | 82 |
return *this; |
83 | 83 |
} |
84 | 84 |
|
85 | 85 |
/// \brief LEMON style iterator for path arcs |
86 | 86 |
/// |
87 | 87 |
/// This class is used to iterate on the arcs of the paths. |
... | ... |
@@ -255,22 +255,22 @@ |
255 | 255 |
/// \brief Template copy constructor |
256 | 256 |
/// |
257 | 257 |
/// This path can be initialized with any other path type. It just |
258 | 258 |
/// makes a copy of the given path. |
259 | 259 |
template <typename CPath> |
260 | 260 |
SimplePath(const CPath& cpath) { |
261 |
|
|
261 |
pathCopy(cpath, *this); |
|
262 | 262 |
} |
263 | 263 |
|
264 | 264 |
/// \brief Template copy assignment |
265 | 265 |
/// |
266 | 266 |
/// This path can be initialized with any other path type. It just |
267 | 267 |
/// makes a copy of the given path. |
268 | 268 |
template <typename CPath> |
269 | 269 |
SimplePath& operator=(const CPath& cpath) { |
270 |
|
|
270 |
pathCopy(cpath, *this); |
|
271 | 271 |
return *this; |
272 | 272 |
} |
273 | 273 |
|
274 | 274 |
/// \brief Iterator class to iterate on the arcs of the paths |
275 | 275 |
/// |
276 | 276 |
/// This class is used to iterate on the arcs of the paths |
... | ... |
@@ -434,13 +434,13 @@ |
434 | 434 |
/// \brief Template copy constructor |
435 | 435 |
/// |
436 | 436 |
/// This path can be initialized with any other path type. It just |
437 | 437 |
/// makes a copy of the given path. |
438 | 438 |
template <typename CPath> |
439 | 439 |
ListPath(const CPath& cpath) : first(0), last(0) { |
440 |
|
|
440 |
pathCopy(cpath, *this); |
|
441 | 441 |
} |
442 | 442 |
|
443 | 443 |
/// \brief Destructor of the path |
444 | 444 |
/// |
445 | 445 |
/// Destructor of the path |
446 | 446 |
~ListPath() { |
... | ... |
@@ -450,13 +450,13 @@ |
450 | 450 |
/// \brief Template copy assignment |
451 | 451 |
/// |
452 | 452 |
/// This path can be initialized with any other path type. It just |
453 | 453 |
/// makes a copy of the given path. |
454 | 454 |
template <typename CPath> |
455 | 455 |
ListPath& operator=(const CPath& cpath) { |
456 |
|
|
456 |
pathCopy(cpath, *this); |
|
457 | 457 |
return *this; |
458 | 458 |
} |
459 | 459 |
|
460 | 460 |
/// \brief Iterator class to iterate on the arcs of the paths |
461 | 461 |
/// |
462 | 462 |
/// This class is used to iterate on the arcs of the paths |
... | ... |
@@ -760,13 +760,13 @@ |
760 | 760 |
|
761 | 761 |
/// \brief Template copy constructor |
762 | 762 |
/// |
763 | 763 |
/// This path can be initialized from any other path type. |
764 | 764 |
template <typename CPath> |
765 | 765 |
StaticPath(const CPath& cpath) : arcs(0) { |
766 |
|
|
766 |
pathCopy(cpath, *this); |
|
767 | 767 |
} |
768 | 768 |
|
769 | 769 |
/// \brief Destructor of the path |
770 | 770 |
/// |
771 | 771 |
/// Destructor of the path |
772 | 772 |
~StaticPath() { |
... | ... |
@@ -776,13 +776,13 @@ |
776 | 776 |
/// \brief Template copy assignment |
777 | 777 |
/// |
778 | 778 |
/// This path can be made equal to any other path type. It simply |
779 | 779 |
/// makes a copy of the given path. |
780 | 780 |
template <typename CPath> |
781 | 781 |
StaticPath& operator=(const CPath& cpath) { |
782 |
|
|
782 |
pathCopy(cpath, *this); |
|
783 | 783 |
return *this; |
784 | 784 |
} |
785 | 785 |
|
786 | 786 |
/// \brief Iterator class to iterate on the arcs of the paths |
787 | 787 |
/// |
788 | 788 |
/// This class is used to iterate on the arcs of the paths |
... | ... |
@@ -925,76 +925,84 @@ |
925 | 925 |
Path, |
926 | 926 |
typename enable_if<typename Path::BuildTag, void>::type |
927 | 927 |
> { |
928 | 928 |
static const bool value = true; |
929 | 929 |
}; |
930 | 930 |
|
931 |
template <typename Target, typename Source, |
|
932 |
bool buildEnable = BuildTagIndicator<Target>::value> |
|
931 |
template <typename From, typename To, |
|
932 |
bool buildEnable = BuildTagIndicator<To>::value> |
|
933 | 933 |
struct PathCopySelectorForward { |
934 |
static void copy(Target& target, const Source& source) { |
|
935 |
target.clear(); |
|
936 |
for (typename Source::ArcIt it(source); it != INVALID; ++it) { |
|
937 |
target.addBack(it); |
|
934 |
static void copy(const From& from, To& to) { |
|
935 |
to.clear(); |
|
936 |
for (typename From::ArcIt it(from); it != INVALID; ++it) { |
|
937 |
to.addBack(it); |
|
938 | 938 |
} |
939 | 939 |
} |
940 | 940 |
}; |
941 | 941 |
|
942 |
template <typename Target, typename Source> |
|
943 |
struct PathCopySelectorForward<Target, Source, true> { |
|
944 |
static void copy(Target& target, const Source& source) { |
|
945 |
target.clear(); |
|
946 |
|
|
942 |
template <typename From, typename To> |
|
943 |
struct PathCopySelectorForward<From, To, true> { |
|
944 |
static void copy(const From& from, To& to) { |
|
945 |
to.clear(); |
|
946 |
to.build(from); |
|
947 | 947 |
} |
948 | 948 |
}; |
949 | 949 |
|
950 |
template <typename Target, typename Source, |
|
951 |
bool buildEnable = BuildTagIndicator<Target>::value> |
|
950 |
template <typename From, typename To, |
|
951 |
bool buildEnable = BuildTagIndicator<To>::value> |
|
952 | 952 |
struct PathCopySelectorBackward { |
953 |
static void copy(Target& target, const Source& source) { |
|
954 |
target.clear(); |
|
955 |
for (typename Source::RevArcIt it(source); it != INVALID; ++it) { |
|
956 |
target.addFront(it); |
|
953 |
static void copy(const From& from, To& to) { |
|
954 |
to.clear(); |
|
955 |
for (typename From::RevArcIt it(from); it != INVALID; ++it) { |
|
956 |
to.addFront(it); |
|
957 | 957 |
} |
958 | 958 |
} |
959 | 959 |
}; |
960 | 960 |
|
961 |
template <typename Target, typename Source> |
|
962 |
struct PathCopySelectorBackward<Target, Source, true> { |
|
963 |
static void copy(Target& target, const Source& source) { |
|
964 |
target.clear(); |
|
965 |
|
|
961 |
template <typename From, typename To> |
|
962 |
struct PathCopySelectorBackward<From, To, true> { |
|
963 |
static void copy(const From& from, To& to) { |
|
964 |
to.clear(); |
|
965 |
to.buildRev(from); |
|
966 | 966 |
} |
967 | 967 |
}; |
968 | 968 |
|
969 | 969 |
|
970 |
template <typename Target, typename Source, |
|
971 |
bool revEnable = RevPathTagIndicator<Source>::value> |
|
970 |
template <typename From, typename To, |
|
971 |
bool revEnable = RevPathTagIndicator<From>::value> |
|
972 | 972 |
struct PathCopySelector { |
973 |
static void copy(Target& target, const Source& source) { |
|
974 |
PathCopySelectorForward<Target, Source>::copy(target, source); |
|
973 |
static void copy(const From& from, To& to) { |
|
974 |
PathCopySelectorForward<From, To>::copy(from, to); |
|
975 | 975 |
} |
976 | 976 |
}; |
977 | 977 |
|
978 |
template <typename Target, typename Source> |
|
979 |
struct PathCopySelector<Target, Source, true> { |
|
980 |
static void copy(Target& target, const Source& source) { |
|
981 |
PathCopySelectorBackward<Target, Source>::copy(target, source); |
|
978 |
template <typename From, typename To> |
|
979 |
struct PathCopySelector<From, To, true> { |
|
980 |
static void copy(const From& from, To& to) { |
|
981 |
PathCopySelectorBackward<From, To>::copy(from, to); |
|
982 | 982 |
} |
983 | 983 |
}; |
984 | 984 |
|
985 | 985 |
} |
986 | 986 |
|
987 | 987 |
|
988 | 988 |
/// \brief Make a copy of a path. |
989 | 989 |
/// |
990 |
/// This function makes a copy of a path. |
|
991 |
template <typename Target, typename Source> |
|
992 |
void copyPath(Target& target, const Source& source) { |
|
993 |
checkConcept<concepts::PathDumper<typename Source::Digraph>, Source>(); |
|
994 |
|
|
990 |
/// This function makes a copy of a path. |
|
991 |
template <typename From, typename To> |
|
992 |
void pathCopy(const From& from, To& to) { |
|
993 |
checkConcept<concepts::PathDumper<typename From::Digraph>, From>(); |
|
994 |
_path_bits::PathCopySelector<From, To>::copy(from, to); |
|
995 |
} |
|
996 |
|
|
997 |
/// \brief Deprecated version of \ref pathCopy(). |
|
998 |
/// |
|
999 |
/// Deprecated version of \ref pathCopy() (only for reverse compatibility). |
|
1000 |
template <typename To, typename From> |
|
1001 |
void copyPath(To& to, const From& from) { |
|
1002 |
pathCopy(from, to); |
|
995 | 1003 |
} |
996 | 1004 |
|
997 | 1005 |
/// \brief Check the consistency of a path. |
998 | 1006 |
/// |
999 | 1007 |
/// This function checks that the target of each arc is the same |
1000 | 1008 |
/// as the source of the next one. |
0 comments (0 inline)