# HG changeset patch
# User Balazs Dezso <deba@inf.elte.hu>
# Date 1208865052 -7200
# Node ID 75b78e1f4c0570cc5f3c5f0eae0c77a808582e43
# Parent a0f755a30cf1c843736ed1d881f151f6f59ac1f3
MSVC 2005 compatible path structure (ticket #87)
diff -r a0f755a30cf1 -r 75b78e1f4c05 lemon/path.h
a
|
b
|
|
903 | 903 | namespace _path_bits { |
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 |
914 | | > { |
| 910 | template <typename Path> |
| 911 | struct RevPathTagIndicator< |
| 912 | Path, |
| 913 | typename enable_if<typename Path::RevPathTag, void>::type |
| 914 | > { |
915 | 915 | static const bool value = true; |
916 | 916 | }; |
917 | 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 |
| 927 | > { |
| 928 | static const bool value = true; |
| 929 | }; |
| 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) { |
922 | | target.clear(); |
923 | | for (typename Source::ArcIt it(source); it != INVALID; ++it) { |
924 | | target.addBack(it); |
925 | | } |
| 936 | target.clear(); |
| 937 | for (typename Source::ArcIt it(source); it != INVALID; ++it) { |
| 938 | target.addBack(it); |
| 939 | } |
926 | 940 | } |
927 | 941 | }; |
928 | | |
929 | | template <typename Target, typename Source, typename BuildEnable> |
930 | | struct PathCopySelector< |
931 | | Target, Source, BuildEnable, |
932 | | typename enable_if<typename Source::RevPathTag, void>::type> { |
| 942 | |
| 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(); |
935 | 947 | for (typename Source::RevArcIt it(source); it != INVALID; ++it) { |
… |
… |
|
938 | 950 | } |
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(); |
947 | 957 | target.build(source); |
… |
… |
|
949 | 959 | }; |
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(); |
958 | 965 | target.buildRev(source); |