src/work/marci/graph_wrapper.h
changeset 201 b9158a014fe8
parent 174 44700ed9ffaa
child 212 c07e4dd32438
equal deleted inserted replaced
7:5f32dbefd09d 8:b6a841f597b4
     6 
     6 
     7 namespace hugo {
     7 namespace hugo {
     8 
     8 
     9   template<typename Graph>
     9   template<typename Graph>
    10   class TrivGraphWrapper {
    10   class TrivGraphWrapper {
       
    11   protected:
    11     Graph* graph;
    12     Graph* graph;
    12   
    13   
    13   public:
    14   public:
    14     typedef Graph BaseGraph;
    15     typedef Graph BaseGraph;
    15 
    16 
    85   };
    86   };
    86 
    87 
    87   template<typename Graph>
    88   template<typename Graph>
    88   class RevGraphWrapper
    89   class RevGraphWrapper
    89   {
    90   {
       
    91   protected:
    90     Graph* graph;
    92     Graph* graph;
    91   
    93   
    92   public:
    94   public:
    93     typedef Graph BaseGraph;
    95     typedef Graph BaseGraph;
    94 
    96 
   164   };
   166   };
   165 
   167 
   166 
   168 
   167   template<typename Graph>
   169   template<typename Graph>
   168   class UndirGraphWrapper {
   170   class UndirGraphWrapper {
       
   171   protected:
   169     Graph* graph;
   172     Graph* graph;
   170   
   173   
   171   public:
   174   public:
   172     typedef Graph BaseGraph;
   175     typedef Graph BaseGraph;
   173 
   176 
   397     typedef typename Graph::Node Node;
   400     typedef typename Graph::Node Node;
   398     typedef typename Graph::NodeIt NodeIt;
   401     typedef typename Graph::NodeIt NodeIt;
   399   private:
   402   private:
   400     typedef typename Graph::OutEdgeIt OldOutEdgeIt;
   403     typedef typename Graph::OutEdgeIt OldOutEdgeIt;
   401     typedef typename Graph::InEdgeIt OldInEdgeIt;
   404     typedef typename Graph::InEdgeIt OldInEdgeIt;
       
   405   protected:
   402     const Graph* graph;
   406     const Graph* graph;
   403     FlowMap* flow;
   407     FlowMap* flow;
   404     const CapacityMap* capacity;
   408     const CapacityMap* capacity;
   405   public:
   409   public:
   406 
   410 
   829     //FilterGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::OutEdgeIt> first_out_edges;
   833     //FilterGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::OutEdgeIt> first_out_edges;
   830     
   834     
   831   public:
   835   public:
   832     FilterGraphWrapper(const Graph& _G, FlowMap& _flow, 
   836     FilterGraphWrapper(const Graph& _G, FlowMap& _flow, 
   833 			   const CapacityMap& _capacity) : 
   837 			   const CapacityMap& _capacity) : 
   834       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>(_G, _flow, _capacity), dist(*this) { 
   838       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>(_G, _flow, _capacity), dist(*this, graph->nodeNum()) { 
   835     }
   839     }
   836 
   840 
   837     OutEdgeIt& /*getF*/first(OutEdgeIt& e, const Node& n) const {
   841     OutEdgeIt& /*getF*/first(OutEdgeIt& e, const Node& n) const {
   838       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::/*getF*/first(e, n);
   842       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::/*getF*/first(e, n);
   839       while (valid(e) && (dist.get(tail(e))+1!=dist.get(head(e)))) 
   843       while (valid(e) && (dist.get(tail(e))/*+1!=*/>=dist.get(head(e)))) 
   840 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
   844 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
   841       return e;
   845       return e;
   842     }
   846     }
   843 
   847 
   844     NodeIt& next(NodeIt& e) const {
   848     NodeIt& next(NodeIt& e) const {
   845       return ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
   849       return ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
   846     }
   850     }
   847 
   851 
   848     OutEdgeIt& next(OutEdgeIt& e) const {
   852     OutEdgeIt& next(OutEdgeIt& e) const {
   849       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
   853       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
   850       while (valid(e) && (dist.get(tail(e))+1!=dist.get(head(e)))) 
   854       while (valid(e) && (dist.get(tail(e))/*+1!*/>=dist.get(head(e)))) 
   851 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
   855 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
   852       return e;
   856       return e;
   853     }
   857     }
   854 
   858 
   855     NodeIt& /*getF*/first(NodeIt& n) const {
   859     NodeIt& /*getF*/first(NodeIt& n) const {
   857     }
   861     }
   858 
   862 
   859     void erase(const Edge& e) {
   863     void erase(const Edge& e) {
   860       OutEdgeIt f(e);
   864       OutEdgeIt f(e);
   861       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(f);
   865       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(f);
   862       while (valid(f) && (dist.get(tail(f))+1!=dist.get(head(f)))) 
   866       while (valid(f) && (dist.get(tail(f))/*+1!=*/>=dist.get(head(f)))) 
   863 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(f);
   867 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(f);
   864       first_out_edges.set(this->tail(e), f);
   868       first_out_edges.set(this->tail(e), f);
   865     }
   869     }
   866 
   870 
   867     //TrivGraphWrapper() : graph(0) { }
   871     //TrivGraphWrapper() : graph(0) { }