COIN-OR::LEMON - Graph Library

Ticket #87: vs_2005_path.patch

File vs_2005_path.patch, 3.2 KB (added by Balazs Dezso, 16 years ago)
  • lemon/path.h

    # 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  
    903903  namespace _path_bits {
    904904
    905905    template <typename Path, typename Enable = void>
    906     struct RevTagIndicator {
     906    struct RevPathTagIndicator {
    907907      static const bool value = false;
    908908    };
    909909
    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      > {
    915915      static const bool value = true;
    916916    };
    917917
     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 
    918931    template <typename Target, typename Source,
    919               typename BuildEnable = void, typename RevEnable = void>
     932              bool buildEnable = BuildTagIndicator<Target>::value,
     933              bool revEnable = RevPathTagIndicator<Source>::value>
    920934    struct PathCopySelector {
    921935      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        }
    926940      }
    927941    };
    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> {
    933945      static void copy(Target& target, const Source& source) {
    934946        target.clear();
    935947        for (typename Source::RevArcIt it(source); it != INVALID; ++it) {
     
    938950      }
    939951    };
    940952
    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> {
    945955      static void copy(Target& target, const Source& source) {
    946956        target.clear();
    947957        target.build(source);
     
    949959    };
    950960
    951961    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> {
    956963      static void copy(Target& target, const Source& source) {
    957964        target.clear();
    958965        target.buildRev(source);