# HG changeset patch
# User Peter Kovacs <kpeter@inf.elte.hu>
# Date 1255681297 -7200
# Node ID c6acc34f98dc634b544e62802b9adc8b014bc7f7
# Parent 41bdb4d6c8c32c29a1eaebc3eef9bef7ef1f9862
Use pathCopy(from,to) instead of copyPath(to,from) (#321)
The old version is kept as a deprecated alternative.
diff --git a/lemon/path.h b/lemon/path.h
a
|
b
|
|
70 | 70 | /// It simply makes a copy of the given path. |
71 | 71 | template <typename CPath> |
72 | 72 | Path(const CPath& cpath) { |
73 | | copyPath(*this, cpath); |
| 73 | pathCopy(cpath, *this); |
74 | 74 | } |
75 | 75 | |
76 | 76 | /// \brief Template copy assignment |
… |
… |
|
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 | | copyPath(*this, cpath); |
| 81 | pathCopy(cpath, *this); |
82 | 82 | return *this; |
83 | 83 | } |
84 | 84 | |
… |
… |
|
258 | 258 | /// makes a copy of the given path. |
259 | 259 | template <typename CPath> |
260 | 260 | SimplePath(const CPath& cpath) { |
261 | | copyPath(*this, cpath); |
| 261 | pathCopy(cpath, *this); |
262 | 262 | } |
263 | 263 | |
264 | 264 | /// \brief Template copy assignment |
… |
… |
|
267 | 267 | /// makes a copy of the given path. |
268 | 268 | template <typename CPath> |
269 | 269 | SimplePath& operator=(const CPath& cpath) { |
270 | | copyPath(*this, cpath); |
| 270 | pathCopy(cpath, *this); |
271 | 271 | return *this; |
272 | 272 | } |
273 | 273 | |
… |
… |
|
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 | | copyPath(*this, cpath); |
| 440 | pathCopy(cpath, *this); |
441 | 441 | } |
442 | 442 | |
443 | 443 | /// \brief Destructor of the path |
… |
… |
|
453 | 453 | /// makes a copy of the given path. |
454 | 454 | template <typename CPath> |
455 | 455 | ListPath& operator=(const CPath& cpath) { |
456 | | copyPath(*this, cpath); |
| 456 | pathCopy(cpath, *this); |
457 | 457 | return *this; |
458 | 458 | } |
459 | 459 | |
… |
… |
|
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 | | copyPath(*this, cpath); |
| 766 | pathCopy(cpath, *this); |
767 | 767 | } |
768 | 768 | |
769 | 769 | /// \brief Destructor of the path |
… |
… |
|
779 | 779 | /// makes a copy of the given path. |
780 | 780 | template <typename CPath> |
781 | 781 | StaticPath& operator=(const CPath& cpath) { |
782 | | copyPath(*this, cpath); |
| 782 | pathCopy(cpath, *this); |
783 | 783 | return *this; |
784 | 784 | } |
785 | 785 | |
… |
… |
|
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 | | target.build(source); |
| 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 | | target.buildRev(source); |
| 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 | |
… |
… |
|
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 | | _path_bits::PathCopySelector<Target, Source>::copy(target, source); |
| 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. |