... |
... |
@@ -904,12 +904,25 @@
|
904 |
904 |
|
905 |
905 |
template <typename Path, typename Enable = void>
|
906 |
|
struct RevTagIndicator {
|
|
906 |
struct RevPathTagIndicator {
|
907 |
907 |
static const bool value = false;
|
908 |
908 |
};
|
909 |
909 |
|
910 |
|
template <typename Digraph>
|
911 |
|
struct RevTagIndicator<
|
912 |
|
Digraph,
|
913 |
|
typename enable_if<typename Digraph::RevTag, void>::type
|
|
910 |
template <typename Path>
|
|
911 |
struct RevPathTagIndicator<
|
|
912 |
Path,
|
|
913 |
typename enable_if<typename Path::RevPathTag, void>::type
|
|
914 |
> {
|
|
915 |
static const bool value = true;
|
|
916 |
};
|
|
917 |
|
|
918 |
template <typename Path, typename Enable = void>
|
|
919 |
struct BuildTagIndicator {
|
|
920 |
static const bool value = false;
|
|
921 |
};
|
|
922 |
|
|
923 |
template <typename Path>
|
|
924 |
struct BuildTagIndicator<
|
|
925 |
Path,
|
|
926 |
typename enable_if<typename Path::BuildTag, void>::type
|
914 |
927 |
> {
|
915 |
928 |
static const bool value = true;
|
... |
... |
@@ -917,5 +930,6 @@
|
917 |
930 |
|
918 |
931 |
template <typename Target, typename Source,
|
919 |
|
typename BuildEnable = void, typename RevEnable = void>
|
|
932 |
bool buildEnable = BuildTagIndicator<Target>::value,
|
|
933 |
bool revEnable = RevPathTagIndicator<Source>::value>
|
920 |
934 |
struct PathCopySelector {
|
921 |
935 |
static void copy(Target& target, const Source& source) {
|
... |
... |
@@ -927,8 +941,6 @@
|
927 |
941 |
};
|
928 |
942 |
|
929 |
|
template <typename Target, typename Source, typename BuildEnable>
|
930 |
|
struct PathCopySelector<
|
931 |
|
Target, Source, BuildEnable,
|
932 |
|
typename enable_if<typename Source::RevPathTag, void>::type> {
|
|
943 |
template <typename Target, typename Source>
|
|
944 |
struct PathCopySelector<Target, Source, false, true> {
|
933 |
945 |
static void copy(Target& target, const Source& source) {
|
934 |
946 |
target.clear();
|
... |
... |
@@ -939,8 +951,6 @@
|
939 |
951 |
};
|
940 |
952 |
|
941 |
|
template <typename Target, typename Source, typename RevEnable>
|
942 |
|
struct PathCopySelector<
|
943 |
|
Target, Source,
|
944 |
|
typename enable_if<typename Target::BuildTag, void>::type, RevEnable> {
|
|
953 |
template <typename Target, typename Source>
|
|
954 |
struct PathCopySelector<Target, Source, true, false> {
|
945 |
955 |
static void copy(Target& target, const Source& source) {
|
946 |
956 |
target.clear();
|
... |
... |
@@ -950,8 +960,5 @@
|
950 |
960 |
|
951 |
961 |
template <typename Target, typename Source>
|
952 |
|
struct PathCopySelector<
|
953 |
|
Target, Source,
|
954 |
|
typename enable_if<typename Target::BuildTag, void>::type,
|
955 |
|
typename enable_if<typename Source::RevPathTag, void>::type> {
|
|
962 |
struct PathCopySelector<Target, Source, true, true> {
|
956 |
963 |
static void copy(Target& target, const Source& source) {
|
957 |
964 |
target.clear();
|