src/work/alpar/smart_graph.h
changeset 105 a3c73e9b9b2e
parent 104 7a2d991e9852
child 108 0351b00fd283
     1.1 --- a/src/work/alpar/smart_graph.h	Fri Feb 20 00:29:19 2004 +0000
     1.2 +++ b/src/work/alpar/smart_graph.h	Fri Feb 20 21:45:07 2004 +0000
     1.3 @@ -1,10 +1,12 @@
     1.4 +// -*- mode:C++ -*-
     1.5 +
     1.6  #ifndef SMART_GRAPH_H
     1.7  #define SMART_GRAPH_H
     1.8  
     1.9  #include <iostream>
    1.10  #include <vector>
    1.11  
    1.12 -namespace marci {
    1.13 +namespace hugo {
    1.14  
    1.15    class SmartGraph {
    1.16  
    1.17 @@ -35,58 +37,17 @@
    1.18      class OutEdgeIt;
    1.19      class InEdgeIt;
    1.20      
    1.21 -//      class NodeIt { int n; };
    1.22 -//     class EachNodeIt : public NodeIt { };
    1.23 -//     class EdgeIt { int n; };
    1.24 -//     class EachEdgeIt : public EdgeIt {};
    1.25 -//     class OutEdgeIt : public EdgeIt {};
    1.26 -//     class InEdgeIt : public EdgeIt {};
    1.27 +    //      class NodeIt { int n; };
    1.28 +    //     class EachNodeIt : public NodeIt { };
    1.29 +    //     class EdgeIt { int n; };
    1.30 +    //     class EachEdgeIt : public EdgeIt {};
    1.31 +    //     class OutEdgeIt : public EdgeIt {};
    1.32 +    //     class InEdgeIt : public EdgeIt {};
    1.33      //    class SymEdgeIt;
    1.34 -   
    1.35 - template <typename T> class NodeMap;
    1.36 +    
    1.37 +    template <typename T> class NodeMap;
    1.38      template <typename T> class EdgeMap;
    1.39      
    1.40 -  private:
    1.41 -    
    1.42 -    template <typename T> friend class NodeMap;
    1.43 -    template <typename T> friend class EdgeMap;
    1.44 -
    1.45 -    template <typename T>
    1.46 -    class NodeMap {
    1.47 -      const SmartGraph& G; 
    1.48 -      std::vector<T> container;
    1.49 -    public:
    1.50 -      typedef T ValueType;
    1.51 -      typedef NodeIt KeyType;
    1.52 -      NodeMap(const SmartGraph& _G) : G(_G), container(G.nodeNum()) { }
    1.53 -      NodeMap(const SmartGraph& _G, T a) : 
    1.54 -	G(_G), container(G.nodeNum(), a) { }
    1.55 -      void set(NodeIt n, T a) { container[n.n]=a; }
    1.56 -      T get(NodeIt n) const { return container[n.n]; }
    1.57 -      T& operator[](NodeIt n) { return container[n.n]; }
    1.58 -      const T& operator[](NodeIt n) const { return container[n.n]; }
    1.59 -      void resize() { container.resize(G.nodeNum()); }
    1.60 -      void resize(T a) { container.resize(G.nodeNum(), a); }
    1.61 -    };
    1.62 -
    1.63 -    template <typename T>
    1.64 -    class EdgeMap {
    1.65 -      const SmartGraph& G; 
    1.66 -      std::vector<T> container;
    1.67 -    public:
    1.68 -      typedef T ValueType;
    1.69 -      typedef EdgeIt KeyType;
    1.70 -      EdgeMap(const SmartGraph& _G) : G(_G), container(G.edgeNum()) { }
    1.71 -      EdgeMap(const SmartGraph& _G, T a) : 
    1.72 -	G(_G), container(G.edgeNum(), a) { }
    1.73 -      void set(EdgeIt e, T a) { container[e.n]=a; }
    1.74 -      T get(EdgeIt e) const { return container[e.n]; }
    1.75 -      T& operator[](EdgeIt e) { return container[e.n]; } 
    1.76 -      const T& operator[](EdgeIt e) const { return container[e.n]; } 
    1.77 -      void resize() { container.resize(G.edgeNum()); }
    1.78 -      void resize(T a) { container.resize(G.edgeNum(), a); }
    1.79 -    };
    1.80 -
    1.81    public:
    1.82  
    1.83      /* default constructor */
    1.84 @@ -136,8 +97,9 @@
    1.85      bool valid(EachEdgeIt e) const { return e.n<int(edges.size()); }
    1.86      bool valid(NodeIt n) const { return n.n<int(nodes.size()); }
    1.87      
    1.88 -    template <typename It> It next(It it) const { 
    1.89 -      It tmp(it); return goNext(it); }
    1.90 +    template <typename It> It next(It it) const
    1.91 +      //    { It tmp(it); return goNext(tmp); }
    1.92 +    { It tmp; tmp.n=it.n+1; return tmp; }
    1.93  
    1.94      NodeIt& goNext(NodeIt& it) const { ++it.n; return it; }
    1.95      OutEdgeIt& goNext(OutEdgeIt& it) const
    1.96 @@ -228,7 +190,49 @@
    1.97        InEdgeIt() : EdgeIt() { }
    1.98        InEdgeIt(const SmartGraph& G,NodeIt v) :EdgeIt(G.nodes[v.n].first_in){}
    1.99      };
   1.100 +
   1.101 +    // Map types
   1.102 +
   1.103 +    template <typename T>
   1.104 +    class NodeMap {
   1.105 +      const SmartGraph& G; 
   1.106 +      std::vector<T> container;
   1.107 +    public:
   1.108 +      typedef T ValueType;
   1.109 +      typedef NodeIt KeyType;
   1.110 +      NodeMap(const SmartGraph& _G) : G(_G), container(G.nodeNum()) { }
   1.111 +      NodeMap(const SmartGraph& _G, T a) : 
   1.112 +	G(_G), container(G.nodeNum(), a) { }
   1.113 +      void set(NodeIt n, T a) { container[n.n]=a; }
   1.114 +      T get(NodeIt n) const { return container[n.n]; }
   1.115 +      T& operator[](NodeIt n) { return container[n.n]; }
   1.116 +      const T& operator[](NodeIt n) const { return container[n.n]; }
   1.117 +      void update() { container.resize(G.nodeNum()); }
   1.118 +      void update(T a) { container.resize(G.nodeNum(), a); }
   1.119 +    };
   1.120 +
   1.121 +    template <typename T>
   1.122 +    class EdgeMap {
   1.123 +      const SmartGraph& G; 
   1.124 +      std::vector<T> container;
   1.125 +    public:
   1.126 +      typedef T ValueType;
   1.127 +      typedef EdgeIt KeyType;
   1.128 +      EdgeMap(const SmartGraph& _G) : G(_G), container(G.edgeNum()) { }
   1.129 +      EdgeMap(const SmartGraph& _G, T a) : 
   1.130 +	G(_G), container(G.edgeNum(), a) { }
   1.131 +      void set(EdgeIt e, T a) { container[e.n]=a; }
   1.132 +      T get(EdgeIt e) const { return container[e.n]; }
   1.133 +      T& operator[](EdgeIt e) { return container[e.n]; } 
   1.134 +      const T& operator[](EdgeIt e) const { return container[e.n]; } 
   1.135 +      void update() { container.resize(G.edgeNum()); }
   1.136 +      void update(T a) { container.resize(G.edgeNum(), a); }
   1.137 +    };
   1.138 +
   1.139 +
   1.140 +
   1.141 +
   1.142    };
   1.143 -} //namespace marci
   1.144 +} //namespace hugo
   1.145  
   1.146  #endif //SMART_GRAPH_H