gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Merge fix #321
0 1 0
merge 1.0
0 files changed with 51 insertions and 43 deletions:
↑ Collapse diff ↑
Ignore white space 8 line context
... ...
@@ -69,17 +69,17 @@
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
      copyPath(*this, cpath);
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
      copyPath(*this, cpath);
81
      pathCopy(cpath, *this);
82 82
      return *this;
83 83
    }
84 84

	
85 85
    /// \brief LEMON style iterator for path arcs
... ...
@@ -257,18 +257,18 @@
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
      copyPath(*this, cpath);
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
      copyPath(*this, cpath);
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
... ...
@@ -436,9 +436,9 @@
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
      copyPath(*this, cpath);
440
      pathCopy(cpath, *this);
441 441
    }
442 442

	
443 443
    /// \brief Destructor of the path
444 444
    ///
... ...
@@ -452,9 +452,9 @@
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
      copyPath(*this, cpath);
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
... ...
@@ -762,9 +762,9 @@
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
      copyPath(*this, cpath);
766
      pathCopy(cpath, *this);
767 767
    }
768 768

	
769 769
    /// \brief Destructor of the path
770 770
    ///
... ...
@@ -778,9 +778,9 @@
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
      copyPath(*this, cpath);
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
... ...
@@ -927,72 +927,80 @@
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
        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

	
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
    _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.
998 1006
  ///
0 comments (0 inline)