| ... | ... |
@@ -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)