src/work/deba/test_graph.h
changeset 340 a2ce3c4780b7
parent 262 60de0f16a4a1
child 377 33fe0ee01dc5
     1.1 --- a/src/work/deba/test_graph.h	Fri Apr 16 13:26:15 2004 +0000
     1.2 +++ b/src/work/deba/test_graph.h	Fri Apr 16 13:42:03 2004 +0000
     1.3 @@ -7,6 +7,12 @@
     1.4  
     1.5  #include <invalid.h>
     1.6  
     1.7 +#include "vector_map.h"
     1.8 +#include "edge_map_registry.h"
     1.9 +#include "node_map_registry.h"
    1.10 +#include "edge_map_base.h"
    1.11 +#include "node_map_base.h"
    1.12 +
    1.13  namespace hugo {
    1.14  
    1.15    template <typename It>
    1.16 @@ -28,53 +34,22 @@
    1.17      class InEdgeIt;
    1.18      class SymEdgeIt;
    1.19      
    1.20 -    template <typename T> class NodeMap;
    1.21 -    template <typename T> class EdgeMap;
    1.22 +//    template <typename T> class NodeMap;
    1.23 +//    template <typename T> class EdgeMap;
    1.24    private:
    1.25 -    template <typename T> friend class NodeMap;
    1.26 -    template <typename T> friend class EdgeMap;
    1.27 +//    template <typename T> friend class NodeMap;
    1.28 + //   template <typename T> friend class EdgeMap;
    1.29   
    1.30 -    template <typename T>
    1.31 -    class NodeMap {
    1.32 -      const ListGraph& G; 
    1.33 -      std::vector<T> container;
    1.34 -    public:
    1.35 -      typedef T ValueType;
    1.36 -      typedef Node KeyType;
    1.37 -      NodeMap(const ListGraph& _G) : G(_G), container(G.node_id) { }
    1.38 -      NodeMap(const ListGraph& _G, T a) : 
    1.39 -	G(_G), container(G.node_id, a) { }
    1.40 -      void set(Node n, T a) { container[/*G.id(n)*/n.node->id]=a; }
    1.41 -      T get(Node n) const { return container[/*G.id(n)*/n.node->id]; }
    1.42 -      typename std::vector<T>::reference operator[](Node n) { 
    1.43 -	return container[/*G.id(n)*/n.node->id]; }
    1.44 -      typename std::vector<T>::const_reference operator[](Node n) const { 
    1.45 -	return container[/*G.id(n)*/n.node->id]; 
    1.46 -      }
    1.47 -      void update() { container.resize(G.node_id); }
    1.48 -      void update(T a) { container.resize(G.node_id, a); }
    1.49 -    };
    1.50 +		NodeMapRegistry<ListGraph, Node> node_maps;
    1.51  
    1.52      template <typename T>
    1.53 -    class EdgeMap {
    1.54 -      const ListGraph& G; 
    1.55 -      std::vector<T> container;
    1.56 -    public:
    1.57 -      typedef T ValueType;
    1.58 -      typedef Edge KeyType;
    1.59 -      EdgeMap(const ListGraph& _G) : G(_G), container(G.edge_id) { }
    1.60 -      EdgeMap(const ListGraph& _G, T a) : 
    1.61 -	G(_G), container(G.edge_id, a) { }
    1.62 -      void set(Edge e, T a) { container[/*G.id(e)*/e.edge->id]=a; }
    1.63 -      T get(Edge e) const { return container[/*G.id(e)*/e.edge->id]; }
    1.64 -      typename std::vector<T>::reference operator[](Edge e) { 
    1.65 -	return container[/*G.id(e)*/e.edge->id]; } 
    1.66 -      typename std::vector<T>::const_reference operator[](Edge e) const { 
    1.67 -	return container[/*G.id(e)*/e.edge->id]; 
    1.68 -      } 
    1.69 -      void update() { container.resize(G.edge_id); }
    1.70 -      void update(T a) { container.resize(G.edge_id, a); }
    1.71 -    };
    1.72 +    class NodeMap : public VectorMap<ListGraph, Edge, T, EdgeMapBase> {};
    1.73 +		
    1.74 +		EdgeMapRegistry<ListGraph, Edge> edge_maps;
    1.75 +
    1.76 +    template <typename T>
    1.77 +    class EdgeMap : public VectorMap<Graph, Node, T, NodeMapBase> {};
    1.78 +
    1.79  
    1.80      int node_id;
    1.81      int edge_id;
    1.82 @@ -323,18 +298,28 @@
    1.83  
    1.84      /* adding nodes and edges */
    1.85  
    1.86 -    Node addNode() { return Node(_add_node()); }
    1.87 +    Node addNode() { 
    1.88 +			Node n = _add_node();
    1.89 +			node_maps.add(n);
    1.90 +			return n; 
    1.91 +		}
    1.92      Edge addEdge(Node u, Node v) {
    1.93 -      return Edge(_add_edge(u.node, v.node)); 
    1.94 +			Edge e = _add_edge(u.node, v.node);
    1.95 +			edge_maps.add(e);
    1.96 +      return e; 
    1.97      }
    1.98  
    1.99      void erase(Node i) { 
   1.100 +			node_map.erase(i);
   1.101        while (first<OutEdgeIt>(i).valid()) erase(first<OutEdgeIt>(i));
   1.102        while (first<InEdgeIt>(i).valid()) erase(first<InEdgeIt>(i));
   1.103        _delete_node(i.node); 
   1.104      }
   1.105    
   1.106 -    void erase(Edge e) { _delete_edge(e.edge); }
   1.107 +    void erase(Edge e) { 
   1.108 +			edge_maps.erase(e);
   1.109 +			_delete_edge(e.edge); 
   1.110 +		}
   1.111  
   1.112      void clear() { 
   1.113        while (first<NodeIt>().valid()) erase(first<NodeIt>());