gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Rename Residual to ResidualDigraph (#67) The new name is more analogous to other adaptor names.
0 2 0
default
2 files changed with 17 insertions and 18 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
... ...
@@ -2657,28 +2657,28 @@
2657 2657
      bool operator[](const typename Digraph::Arc& a) const {
2658 2658
        return _tolerance.positive((*_flow)[a]);
2659 2659
      }
2660 2660
    };
2661 2661

	
2662 2662
  }
2663 2663

	
2664 2664
  /// \ingroup graph_adaptors
2665 2665
  ///
2666 2666
  /// \brief Adaptor class for composing the residual digraph for directed
2667 2667
  /// flow and circulation problems.
2668 2668
  ///
2669
  /// Residual can be used for composing the \e residual digraph for directed
2670
  /// flow and circulation problems. Let \f$ G=(V, A) \f$ be a directed graph
2671
  /// and let \f$ F \f$ be a number type. Let \f$ flow, cap: A\to F \f$ be
2672
  /// functions on the arcs.
2669
  /// ResidualDigraph can be used for composing the \e residual digraph
2670
  /// for directed flow and circulation problems. Let \f$ G=(V, A) \f$
2671
  /// be a directed graph and let \f$ F \f$ be a number type.
2672
  /// Let \f$ flow, cap: A\to F \f$ be functions on the arcs.
2673 2673
  /// This adaptor implements a digraph structure with node set \f$ V \f$
2674 2674
  /// and arc set \f$ A_{forward}\cup A_{backward} \f$,
2675 2675
  /// where \f$ A_{forward}=\{uv : uv\in A, flow(uv)<cap(uv)\} \f$ and
2676 2676
  /// \f$ A_{backward}=\{vu : uv\in A, flow(uv)>0\} \f$, i.e. the so
2677 2677
  /// called residual digraph.
2678 2678
  /// When the union \f$ A_{forward}\cup A_{backward} \f$ is taken,
2679 2679
  /// multiplicities are counted, i.e. the adaptor has exactly
2680 2680
  /// \f$ |A_{forward}| + |A_{backward}|\f$ arcs (it may have parallel
2681 2681
  /// arcs).
2682 2682
  /// This class conforms to the \ref concepts::Digraph "Digraph" concept.
2683 2683
  ///
2684 2684
  /// \tparam GR The type of the adapted digraph.
... ...
@@ -2695,51 +2695,51 @@
2695 2695
  /// \tparam TL The tolerance type for handling inexact computation.
2696 2696
  /// The default tolerance type depends on the value type of the
2697 2697
  /// capacity map.
2698 2698
  ///
2699 2699
  /// \note This adaptor is implemented using Undirector and FilterArcs
2700 2700
  /// adaptors.
2701 2701
  ///
2702 2702
  /// \note The \c Node type of this adaptor and the adapted digraph are
2703 2703
  /// convertible to each other, moreover the \c Arc type of the adaptor
2704 2704
  /// is convertible to the \c Arc type of the adapted digraph.
2705 2705
#ifdef DOXYGEN
2706 2706
  template<typename GR, typename CM, typename FM, typename TL>
2707
  class Residual
2707
  class ResidualDigraph
2708 2708
#else
2709 2709
  template<typename GR,
2710 2710
           typename CM = typename GR::template ArcMap<int>,
2711 2711
           typename FM = CM,
2712 2712
           typename TL = Tolerance<typename CM::Value> >
2713
  class Residual :
2713
  class ResidualDigraph :
2714 2714
    public FilterArcs<
2715 2715
      Undirector<const GR>,
2716 2716
      typename Undirector<const GR>::template CombinedArcMap<
2717 2717
        _adaptor_bits::ResForwardFilter<const GR, CM, FM, TL>,
2718 2718
        _adaptor_bits::ResBackwardFilter<const GR, CM, FM, TL> > >
2719 2719
#endif
2720 2720
  {
2721 2721
  public:
2722 2722

	
2723 2723
    /// The type of the underlying digraph.
2724 2724
    typedef GR Digraph;
2725 2725
    /// The type of the capacity map.
2726 2726
    typedef CM CapacityMap;
2727 2727
    /// The type of the flow map.
2728 2728
    typedef FM FlowMap;
2729 2729
    /// The tolerance type.
2730 2730
    typedef TL Tolerance;
2731 2731

	
2732 2732
    typedef typename CapacityMap::Value Value;
2733
    typedef Residual Adaptor;
2733
    typedef ResidualDigraph Adaptor;
2734 2734

	
2735 2735
  protected:
2736 2736

	
2737 2737
    typedef Undirector<const Digraph> Undirected;
2738 2738

	
2739 2739
    typedef _adaptor_bits::ResForwardFilter<const Digraph, CapacityMap,
2740 2740
                                            FlowMap, Tolerance> ForwardFilter;
2741 2741

	
2742 2742
    typedef _adaptor_bits::ResBackwardFilter<const Digraph, CapacityMap,
2743 2743
                                             FlowMap, Tolerance> BackwardFilter;
2744 2744

	
2745 2745
    typedef typename Undirected::
... ...
@@ -2752,26 +2752,26 @@
2752 2752

	
2753 2753
    Undirected _graph;
2754 2754
    ForwardFilter _forward_filter;
2755 2755
    BackwardFilter _backward_filter;
2756 2756
    ArcFilter _arc_filter;
2757 2757

	
2758 2758
  public:
2759 2759

	
2760 2760
    /// \brief Constructor
2761 2761
    ///
2762 2762
    /// Constructor of the residual digraph adaptor. The parameters are the
2763 2763
    /// digraph, the capacity map, the flow map, and a tolerance object.
2764
    Residual(const Digraph& digraph, const CapacityMap& capacity,
2765
             FlowMap& flow, const Tolerance& tolerance = Tolerance())
2764
    ResidualDigraph(const Digraph& digraph, const CapacityMap& capacity,
2765
                    FlowMap& flow, const Tolerance& tolerance = Tolerance())
2766 2766
      : Parent(), _capacity(&capacity), _flow(&flow), _graph(digraph),
2767 2767
        _forward_filter(capacity, flow, tolerance),
2768 2768
        _backward_filter(capacity, flow, tolerance),
2769 2769
        _arc_filter(_forward_filter, _backward_filter)
2770 2770
    {
2771 2771
      Parent::setDigraph(_graph);
2772 2772
      Parent::setArcFilterMap(_arc_filter);
2773 2773
    }
2774 2774

	
2775 2775
    typedef typename Parent::Arc Arc;
2776 2776

	
2777 2777
    /// \brief Returns the residual capacity of the given arc.
... ...
@@ -2860,28 +2860,27 @@
2860 2860
    ResidualCapacity residualCapacity() const {
2861 2861
      return ResidualCapacity(*this);
2862 2862
    }
2863 2863

	
2864 2864
  };
2865 2865

	
2866 2866
  /// \brief Returns a (read-only) Residual adaptor
2867 2867
  ///
2868 2868
  /// This function just returns a (read-only) \ref Residual adaptor.
2869 2869
  /// \ingroup graph_adaptors
2870 2870
  /// \relates Residual
2871 2871
  template<typename GR, typename CM, typename FM>
2872
  Residual<GR, CM, FM> residual(const GR& digraph,
2873
                                const CM& capacity_map,
2874
                                FM& flow_map) {
2875
    return Residual<GR, CM, FM> (digraph, capacity_map, flow_map);
2872
  ResidualDigraph<GR, CM, FM>
2873
  residualDigraph(const GR& digraph, const CM& capacity_map, FM& flow_map) {
2874
    return ResidualDigraph<GR, CM, FM> (digraph, capacity_map, flow_map);
2876 2875
  }
2877 2876

	
2878 2877

	
2879 2878
  template <typename _Digraph>
2880 2879
  class SplitNodesBase {
2881 2880
  public:
2882 2881

	
2883 2882
    typedef _Digraph Digraph;
2884 2883
    typedef DigraphAdaptorBase<const _Digraph> Parent;
2885 2884
    typedef SplitNodesBase Adaptor;
2886 2885

	
2887 2886
    typedef typename Digraph::Node DigraphNode;
Ignore white space 24 line context
... ...
@@ -572,33 +572,33 @@
572 572

	
573 573
  // Check the conversion of nodes and arcs/edges
574 574
  Digraph::Node nd = n3;
575 575
  nd = n3;
576 576
  Adaptor::Node na = n1;
577 577
  na = n2;
578 578
  Digraph::Arc ad = e3;
579 579
  ad = e3;
580 580
  Adaptor::Edge ea = a1;
581 581
  ea = a2;
582 582
}
583 583

	
584
void checkResidual() {
584
void checkResidualDigraph() {
585 585
  // Check concepts
586
  checkConcept<concepts::Digraph, Residual<concepts::Digraph> >();
587
  checkConcept<concepts::Digraph, Residual<ListDigraph> >();
586
  checkConcept<concepts::Digraph, ResidualDigraph<concepts::Digraph> >();
587
  checkConcept<concepts::Digraph, ResidualDigraph<ListDigraph> >();
588 588

	
589 589
  // Create a digraph and an adaptor
590 590
  typedef ListDigraph Digraph;
591 591
  typedef Digraph::ArcMap<int> IntArcMap;
592
  typedef Residual<Digraph, IntArcMap> Adaptor;
592
  typedef ResidualDigraph<Digraph, IntArcMap> Adaptor;
593 593

	
594 594
  Digraph digraph;
595 595
  IntArcMap capacity(digraph), flow(digraph);
596 596
  Adaptor adaptor(digraph, capacity, flow);
597 597

	
598 598
  Digraph::Node n1 = digraph.addNode();
599 599
  Digraph::Node n2 = digraph.addNode();
600 600
  Digraph::Node n3 = digraph.addNode();
601 601
  Digraph::Node n4 = digraph.addNode();
602 602

	
603 603
  Digraph::Arc a1 = digraph.addArc(n1, n2);
604 604
  Digraph::Arc a2 = digraph.addArc(n1, n3);
... ...
@@ -1461,25 +1461,25 @@
1461 1461
  checkGraphNodeMap(uuadaptor);
1462 1462
  checkGraphEdgeMap(uuadaptor);
1463 1463
  checkGraphArcMap(uuadaptor);
1464 1464
}
1465 1465

	
1466 1466
int main(int, const char **) {
1467 1467
  // Check the digraph adaptors (using ListDigraph)
1468 1468
  checkReverseDigraph();
1469 1469
  checkSubDigraph();
1470 1470
  checkFilterNodes1();
1471 1471
  checkFilterArcs();
1472 1472
  checkUndirector();
1473
  checkResidual();
1473
  checkResidualDigraph();
1474 1474
  checkSplitNodes();
1475 1475

	
1476 1476
  // Check the graph adaptors (using ListGraph)
1477 1477
  checkSubGraph();
1478 1478
  checkFilterNodes2();
1479 1479
  checkFilterEdges();
1480 1480
  checkOrienter();
1481 1481

	
1482 1482
  // Combine adaptors (using GridGraph)
1483 1483
  checkCombiningAdaptors();
1484 1484

	
1485 1485
  return 0;
0 comments (0 inline)