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