src/work/marci/graph_wrapper.h
changeset 312 54e07057eb47
parent 311 6635b11938fe
child 317 6e6db1c49bc1
     1.1 --- a/src/work/marci/graph_wrapper.h	Tue Apr 06 12:00:34 2004 +0000
     1.2 +++ b/src/work/marci/graph_wrapper.h	Wed Apr 07 10:57:58 2004 +0000
     1.3 @@ -6,158 +6,154 @@
     1.4  
     1.5  namespace hugo {
     1.6  
     1.7 -  template<typename Graph>
     1.8 -  class TrivGraphWrapper {
     1.9 -  protected:
    1.10 -    Graph* graph;
    1.11 +//   template<typename Graph>
    1.12 +//   class TrivGraphWrapper {
    1.13 +//   protected:
    1.14 +//     Graph* graph;
    1.15    
    1.16 -  public:
    1.17 -//    typedef Graph BaseGraph;
    1.18 -    typedef Graph ParentGraph;
    1.19 +//   public:
    1.20 +// //    typedef Graph BaseGraph;
    1.21 +//     typedef Graph ParentGraph;
    1.22  
    1.23 -//     TrivGraphWrapper() : graph(0) { }
    1.24 -    TrivGraphWrapper(Graph& _graph) : graph(&_graph) { }
    1.25 -//     void setGraph(Graph& _graph) { graph = &_graph; }
    1.26 -//     Graph& getGraph() const { return *graph; }
    1.27 +// //     TrivGraphWrapper() : graph(0) { }
    1.28 +//     TrivGraphWrapper(Graph& _graph) : graph(&_graph) { }
    1.29 +// //     void setGraph(Graph& _graph) { graph = &_graph; }
    1.30 +// //     Graph& getGraph() const { return *graph; }
    1.31  
    1.32 -    typedef typename Graph::Node Node;
    1.33 -    class NodeIt : public Graph::NodeIt { 
    1.34 -    public:
    1.35 -      NodeIt() { }
    1.36 -      NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { }
    1.37 -//      NodeIt(const typename BaseGraph::NodeIt& n) : Graph::NodeIt(n) { }
    1.38 -      NodeIt(const Invalid& i) : Graph::NodeIt(i) { }
    1.39 -      NodeIt(const TrivGraphWrapper<Graph>& _G) : 
    1.40 -	Graph::NodeIt(*(_G.graph)) { }
    1.41 -//      operator typename BaseGraph::NodeIt() { 
    1.42 -//	return typename BaseGraph::NodeIt(this->Graph::NodeIt);
    1.43 -//      }
    1.44 -    };
    1.45 -    typedef typename Graph::Edge Edge;
    1.46 -    class OutEdgeIt : public Graph::OutEdgeIt { 
    1.47 -    public:
    1.48 -      OutEdgeIt() { }
    1.49 -      OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { }
    1.50 -      OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { }
    1.51 -      OutEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) : 
    1.52 -	Graph::OutEdgeIt(*(_G.graph), n) { }
    1.53 -    };
    1.54 -    class InEdgeIt : public Graph::InEdgeIt { 
    1.55 -    public:
    1.56 -      InEdgeIt() { }
    1.57 -      InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { }
    1.58 -      InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { }
    1.59 -      InEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) : 
    1.60 -	Graph::InEdgeIt(*(_G.graph), n) { }
    1.61 -    };
    1.62 -    //typedef typename Graph::SymEdgeIt SymEdgeIt;
    1.63 -    class EdgeIt : public Graph::EdgeIt { 
    1.64 -    public:
    1.65 -      EdgeIt() { }
    1.66 -      EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { }
    1.67 -      EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { }
    1.68 -      EdgeIt(const TrivGraphWrapper<Graph>& _G) : 
    1.69 -	Graph::EdgeIt(*(_G.graph)) { }
    1.70 -    };
    1.71 +//     typedef typename Graph::Node Node;
    1.72 +//     class NodeIt : public Graph::NodeIt { 
    1.73 +//     public:
    1.74 +//       NodeIt() { }
    1.75 +//       NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { }
    1.76 +//       NodeIt(const Invalid& i) : Graph::NodeIt(i) { }
    1.77 +//       NodeIt(const TrivGraphWrapper<Graph>& _G) : 
    1.78 +// 	Graph::NodeIt(*(_G.graph)) { }
    1.79 +//     };
    1.80 +//     typedef typename Graph::Edge Edge;
    1.81 +//     class OutEdgeIt : public Graph::OutEdgeIt { 
    1.82 +//     public:
    1.83 +//       OutEdgeIt() { }
    1.84 +//       OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { }
    1.85 +//       OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { }
    1.86 +//       OutEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) : 
    1.87 +// 	Graph::OutEdgeIt(*(_G.graph), n) { }
    1.88 +//     };
    1.89 +//     class InEdgeIt : public Graph::InEdgeIt { 
    1.90 +//     public:
    1.91 +//       InEdgeIt() { }
    1.92 +//       InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { }
    1.93 +//       InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { }
    1.94 +//       InEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) : 
    1.95 +// 	Graph::InEdgeIt(*(_G.graph), n) { }
    1.96 +//     };
    1.97 +//     //typedef typename Graph::SymEdgeIt SymEdgeIt;
    1.98 +//     class EdgeIt : public Graph::EdgeIt { 
    1.99 +//     public:
   1.100 +//       EdgeIt() { }
   1.101 +//       EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { }
   1.102 +//       EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { }
   1.103 +//       EdgeIt(const TrivGraphWrapper<Graph>& _G) : 
   1.104 +// 	Graph::EdgeIt(*(_G.graph)) { }
   1.105 +//     };
   1.106  
   1.107 -    NodeIt& first(NodeIt& i) const { 
   1.108 -      i=NodeIt(*this);
   1.109 -      return i;
   1.110 -    }
   1.111 -//     template<typename I> I& first(I& i) const { 
   1.112 -//       i=I(*this);
   1.113 +//     NodeIt& first(NodeIt& i) const { 
   1.114 +//       i=NodeIt(*this);
   1.115  //       return i;
   1.116  //     }
   1.117 -    OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { 
   1.118 -      i=OutEdgeIt(*this, p);
   1.119 -      return i;
   1.120 -    }
   1.121 -    InEdgeIt& first(InEdgeIt& i, const Node& p) const { 
   1.122 -      i=InEdgeIt(*this, p);
   1.123 -      return i;
   1.124 -    }
   1.125 -    EdgeIt& first(EdgeIt& i) const { 
   1.126 -      i=EdgeIt(*this);
   1.127 -      return i;
   1.128 -    }
   1.129 -//     template<typename I, typename P> I& first(I& i, const P& p) const { 
   1.130 -//       i=I(*this, p);
   1.131 +//     OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { 
   1.132 +//       i=OutEdgeIt(*this, p);
   1.133  //       return i;
   1.134  //     }
   1.135 +//     InEdgeIt& first(InEdgeIt& i, const Node& p) const { 
   1.136 +//       i=InEdgeIt(*this, p);
   1.137 +//       return i;
   1.138 +//     }
   1.139 +//     EdgeIt& first(EdgeIt& i) const { 
   1.140 +//       i=EdgeIt(*this);
   1.141 +//       return i;
   1.142 +//     }
   1.143 +// //     template<typename I> I& first(I& i) const { 
   1.144 +// //       i=I(*this);
   1.145 +// //       return i;
   1.146 +// //     }
   1.147 +// //     template<typename I, typename P> I& first(I& i, const P& p) const { 
   1.148 +// //       i=I(*this, p);
   1.149 +// //       return i;
   1.150 +// //     }
   1.151      
   1.152 -//    template<typename I> I getNext(const I& i) const { 
   1.153 -//      return graph->getNext(i); }
   1.154 -//    template<typename I> I& next(I &i) const { graph->next(i); return i; }    
   1.155 -    NodeIt& next(NodeIt& i) const { graph->next(i); return i; }
   1.156 -    OutEdgeIt& next(OutEdgeIt& i) const { graph->next(i); return i; }
   1.157 -    InEdgeIt& next(InEdgeIt& i) const { graph->next(i); return i; }
   1.158 -    EdgeIt& next(EdgeIt& i) const { graph->next(i); return i; }
   1.159 +// //    template<typename I> I getNext(const I& i) const { 
   1.160 +// //      return graph->getNext(i); }
   1.161  
   1.162 -    template< typename It > It first() const { 
   1.163 -      It e; this->first(e); return e; }
   1.164 +//     NodeIt& next(NodeIt& i) const { graph->next(i); return i; }
   1.165 +//     OutEdgeIt& next(OutEdgeIt& i) const { graph->next(i); return i; }
   1.166 +//     InEdgeIt& next(InEdgeIt& i) const { graph->next(i); return i; }
   1.167 +//     EdgeIt& next(EdgeIt& i) const { graph->next(i); return i; }
   1.168 +// //    template<typename I> I& next(I &i) const { graph->next(i); return i; }    
   1.169 +//     template< typename It > It first() const { 
   1.170 +//       It e; this->first(e); return e; }
   1.171  
   1.172 -    template< typename It > It first(const Node& v) const { 
   1.173 -      It e; this->first(e, v); return e; }
   1.174 +//     template< typename It > It first(const Node& v) const { 
   1.175 +//       It e; this->first(e, v); return e; }
   1.176  
   1.177 -    Node head(const Edge& e) const { return graph->head(e); }
   1.178 -    Node tail(const Edge& e) const { return graph->tail(e); }
   1.179 +//     Node head(const Edge& e) const { return graph->head(e); }
   1.180 +//     Node tail(const Edge& e) const { return graph->tail(e); }
   1.181  
   1.182 -    template<typename I> bool valid(const I& i) const { 
   1.183 -      return graph->valid(i); }
   1.184 +//     template<typename I> bool valid(const I& i) const { 
   1.185 +//       return graph->valid(i); }
   1.186    
   1.187 -    //template<typename I> void setInvalid(const I &i);
   1.188 -    //{ return graph->setInvalid(i); }
   1.189 +//     //template<typename I> void setInvalid(const I &i);
   1.190 +//     //{ return graph->setInvalid(i); }
   1.191  
   1.192 -    int nodeNum() const { return graph->nodeNum(); }
   1.193 -    int edgeNum() const { return graph->edgeNum(); }
   1.194 +//     int nodeNum() const { return graph->nodeNum(); }
   1.195 +//     int edgeNum() const { return graph->edgeNum(); }
   1.196    
   1.197 -    template<typename I> Node aNode(const I& e) const { 
   1.198 -      return graph->aNode(e); }
   1.199 -    template<typename I> Node bNode(const I& e) const { 
   1.200 -      return graph->bNode(e); }
   1.201 +//     template<typename I> Node aNode(const I& e) const { 
   1.202 +//       return graph->aNode(e); }
   1.203 +//     template<typename I> Node bNode(const I& e) const { 
   1.204 +//       return graph->bNode(e); }
   1.205    
   1.206 -    Node addNode() const { return graph->addNode(); }
   1.207 -    Edge addEdge(const Node& tail, const Node& head) const { 
   1.208 -      return graph->addEdge(tail, head); }
   1.209 +//     Node addNode() const { return graph->addNode(); }
   1.210 +//     Edge addEdge(const Node& tail, const Node& head) const { 
   1.211 +//       return graph->addEdge(tail, head); }
   1.212    
   1.213 -    template<typename I> void erase(const I& i) const { graph->erase(i); }
   1.214 +//     template<typename I> void erase(const I& i) const { graph->erase(i); }
   1.215    
   1.216 -    void clear() const { graph->clear(); }
   1.217 +//     void clear() const { graph->clear(); }
   1.218      
   1.219 -    template<typename T> class NodeMap : public Graph::NodeMap<T> { 
   1.220 -    public:
   1.221 -      NodeMap(const TrivGraphWrapper<Graph>& _G) :  
   1.222 -	Graph::NodeMap<T>(*(_G.graph)) { }
   1.223 -      NodeMap(const TrivGraphWrapper<Graph>& _G, T a) : 
   1.224 -	Graph::NodeMap<T>(*(_G.graph), a) { }
   1.225 -    };
   1.226 -
   1.227 -    template<typename T> class EdgeMap : public Graph::EdgeMap<T> { 
   1.228 -    public:
   1.229 -      EdgeMap(const TrivGraphWrapper<Graph>& _G) :  
   1.230 -	Graph::EdgeMap<T>(*(_G.graph)) { }
   1.231 -      EdgeMap(const TrivGraphWrapper<Graph>& _G, T a) : 
   1.232 -	Graph::EdgeMap<T>(*(_G.graph), a) { }
   1.233 -    };
   1.234 -
   1.235 -//     template<typename Map, typename T> class NodeMapWrapper {
   1.236 -//     protected:
   1.237 -//       Map* map;
   1.238 +//     template<typename T> class NodeMap : public Graph::NodeMap<T> { 
   1.239  //     public:
   1.240 -//       NodeMapWrapper(Map& _map) : map(&_map) { }
   1.241 -//       void set(Node n, T a) { map->set(n, a); }
   1.242 -//       T get(Node n) const { return map->get(n); }
   1.243 +//       NodeMap(const TrivGraphWrapper<Graph>& _G) :  
   1.244 +// 	Graph::NodeMap<T>(*(_G.graph)) { }
   1.245 +//       NodeMap(const TrivGraphWrapper<Graph>& _G, T a) : 
   1.246 +// 	Graph::NodeMap<T>(*(_G.graph), a) { }
   1.247  //     };
   1.248  
   1.249 -//     template<typename Map, typename T> class EdgeMapWrapper {
   1.250 -//     protected:
   1.251 -//       Map* map;
   1.252 +//     template<typename T> class EdgeMap : public Graph::EdgeMap<T> { 
   1.253  //     public:
   1.254 -//       EdgeMapWrapper(Map& _map) : map(&_map) { }
   1.255 -//       void set(Edge n, T a) { map->set(n, a); }
   1.256 -//       T get(Edge n) const { return map->get(n); }
   1.257 +//       EdgeMap(const TrivGraphWrapper<Graph>& _G) :  
   1.258 +// 	Graph::EdgeMap<T>(*(_G.graph)) { }
   1.259 +//       EdgeMap(const TrivGraphWrapper<Graph>& _G, T a) : 
   1.260 +// 	Graph::EdgeMap<T>(*(_G.graph), a) { }
   1.261  //     };
   1.262 -  };
   1.263 +
   1.264 +// //     template<typename Map, typename T> class NodeMapWrapper {
   1.265 +// //     protected:
   1.266 +// //       Map* map;
   1.267 +// //     public:
   1.268 +// //       NodeMapWrapper(Map& _map) : map(&_map) { }
   1.269 +// //       void set(Node n, T a) { map->set(n, a); }
   1.270 +// //       T get(Node n) const { return map->get(n); }
   1.271 +// //     };
   1.272 +
   1.273 +// //     template<typename Map, typename T> class EdgeMapWrapper {
   1.274 +// //     protected:
   1.275 +// //       Map* map;
   1.276 +// //     public:
   1.277 +// //       EdgeMapWrapper(Map& _map) : map(&_map) { }
   1.278 +// //       void set(Edge n, T a) { map->set(n, a); }
   1.279 +// //       T get(Edge n) const { return map->get(n); }
   1.280 +// //     };
   1.281 +//   };
   1.282  
   1.283  
   1.284    template<typename Graph>
   1.285 @@ -176,48 +172,64 @@
   1.286   
   1.287      typedef typename Graph::Node Node;
   1.288      class NodeIt : public Graph::NodeIt { 
   1.289 +      typedef typename Graph::NodeIt GraphNodeIt;
   1.290      public:
   1.291        NodeIt() { }
   1.292        NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { }
   1.293        NodeIt(const Invalid& i) : Graph::NodeIt(i) { }
   1.294        NodeIt(const GraphWrapper<Graph>& _G) : 
   1.295  	Graph::NodeIt(*(_G.graph)) { }
   1.296 +//      operator Node() const { 
   1.297 +//	std::cout << "ize" << std::endl; 
   1.298 +//	return Node(this->GraphNodeIt); 
   1.299 +//      }
   1.300      };
   1.301      typedef typename Graph::Edge Edge;
   1.302      class OutEdgeIt : public Graph::OutEdgeIt { 
   1.303 +      typedef typename Graph::OutEdgeIt GraphOutEdgeIt;
   1.304      public:
   1.305        OutEdgeIt() { }
   1.306        OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { }
   1.307        OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { }
   1.308        OutEdgeIt(const GraphWrapper<Graph>& _G, const Node& n) : 
   1.309  	Graph::OutEdgeIt(*(_G.graph), n) { }
   1.310 +//      operator Edge() const { 
   1.311 +//	std::cout << "ize" << std::endl; 
   1.312 +//	return Edge(this->GraphOutEdgeIt); 
   1.313 +//      }
   1.314      };
   1.315      class InEdgeIt : public Graph::InEdgeIt { 
   1.316 +      typedef typename Graph::InEdgeIt GraphInEdgeIt;
   1.317      public:
   1.318        InEdgeIt() { }
   1.319        InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { }
   1.320        InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { }
   1.321        InEdgeIt(const GraphWrapper<Graph>& _G, const Node& n) : 
   1.322  	Graph::InEdgeIt(*(_G.graph), n) { }
   1.323 +//      operator Edge() const { 
   1.324 +//	std::cout << "ize" << std::endl; 
   1.325 +//	return Edge(this->InOutEdgeIt); 
   1.326 +//      }
   1.327      };
   1.328      //typedef typename Graph::SymEdgeIt SymEdgeIt;
   1.329      class EdgeIt : public Graph::EdgeIt { 
   1.330 +      typedef typename Graph::EdgeIt GraphEdgeIt;
   1.331      public:
   1.332        EdgeIt() { }
   1.333        EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { }
   1.334        EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { }
   1.335        EdgeIt(const GraphWrapper<Graph>& _G) : 
   1.336  	Graph::EdgeIt(*(_G.graph)) { }
   1.337 +//      operator Edge() const { 
   1.338 +//	std::cout << "ize" << std::endl; 
   1.339 +//	return Edge(this->GraphEdgeIt); 
   1.340 +//      }
   1.341      };
   1.342     
   1.343      NodeIt& first(NodeIt& i) const { 
   1.344        i=NodeIt(*this);
   1.345        return i;
   1.346      }
   1.347 -//     template<typename I> I& first(I& i) const {       
   1.348 -//       i=I(*this);
   1.349 -//       return i;
   1.350 -//     }
   1.351      OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { 
   1.352        i=OutEdgeIt(*this, p);
   1.353        return i;
   1.354 @@ -230,6 +242,10 @@
   1.355        i=EdgeIt(*this);
   1.356        return i;
   1.357      }
   1.358 +//     template<typename I> I& first(I& i) const {       
   1.359 +//       i=I(*this);
   1.360 +//       return i;
   1.361 +//     }
   1.362  //     template<typename I, typename P> I& first(I& i, const P& p) const { 
   1.363  //       i=I(*this, p);
   1.364  //       return i; 
   1.365 @@ -237,12 +253,12 @@
   1.366      
   1.367  //    template<typename I> I getNext(const I& i) const { 
   1.368  //      return gw.getNext(i); }
   1.369 -//    template<typename I> I& next(I &i) const { graph->next(i); return i; }    
   1.370 +
   1.371      NodeIt& next(NodeIt& i) const { graph->next(i); return i; }
   1.372      OutEdgeIt& next(OutEdgeIt& i) const { graph->next(i); return i; }
   1.373      InEdgeIt& next(InEdgeIt& i) const { graph->next(i); return i; }
   1.374      EdgeIt& next(EdgeIt& i) const { graph->next(i); return i; }    
   1.375 -
   1.376 +//    template<typename I> I& next(I &i) const { graph->next(i); return i; }    
   1.377      template< typename It > It first() const { 
   1.378        It e; this->first(e); return e; }
   1.379  
   1.380 @@ -251,6 +267,7 @@
   1.381  
   1.382      Node head(const Edge& e) const { return graph->head(e); }
   1.383      Node tail(const Edge& e) const { return graph->tail(e); }
   1.384 +//    Node tail(const OutEdgeIt& e) const { return graph->tail(Edge(e)); }
   1.385  
   1.386      template<typename I> bool valid(const I& i) const { 
   1.387        return graph->valid(i); }