gravatar
deba@inf.elte.hu
deba@inf.elte.hu
MSVC 2005 compatible path structure (ticket #87)
0 1 0
default
1 file changed with 25 insertions and 18 deletions:
↑ Collapse diff ↑
Ignore white space 12 line context
... ...
@@ -900,62 +900,69 @@
900 900
  // Additional utilities
901 901
  ///////////////////////////////////////////////////////////////////////
902 902

	
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
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;
916 929
    };
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) {
922 936
        target.clear();
923 937
        for (typename Source::ArcIt it(source); it != INVALID; ++it) {
924 938
          target.addBack(it);
925 939
        }
926 940
      }
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();
935 947
        for (typename Source::RevArcIt it(source); it != INVALID; ++it) {
936 948
          target.addFront(it);
937 949
        }
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);
948 958
      }
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);
959 966
      }
960 967
    };
961 968

	
0 comments (0 inline)