# 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. |