1.1 --- a/lemon/edge_set.h Wed Mar 01 10:04:47 2006 +0000
1.2 +++ b/lemon/edge_set.h Wed Mar 01 10:17:25 2006 +0000
1.3 @@ -20,6 +20,7 @@
1.4 #define LEMON_EDGE_SET_H
1.5
1.6
1.7 +#include <lemon/bits/default_map.h>
1.8 #include <lemon/bits/edge_set_extender.h>
1.9
1.10 /// \ingroup graphs
1.11 @@ -45,7 +46,7 @@
1.12 NodeT() : first_out(-1), first_in(-1) {}
1.13 };
1.14
1.15 - typedef typename Graph::template NodeMap<NodeT> NodesImplBase;
1.16 + typedef DefaultMap<Graph, Node, NodeT> NodesImplBase;
1.17
1.18 NodesImplBase* nodes;
1.19
1.20 @@ -196,6 +197,12 @@
1.21 Node source(const Edge& edge) const { return edges[edge.id].source;}
1.22 Node target(const Edge& edge) const { return edges[edge.id].target;}
1.23
1.24 + typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier;
1.25 +
1.26 + NodeNotifier& getNotifier(Node) const {
1.27 + return graph->getNotifier(Node());
1.28 + }
1.29 +
1.30 template <typename _Value>
1.31 class NodeMap : public Graph::template NodeMap<_Value> {
1.32 public:
1.33 @@ -404,7 +411,7 @@
1.34 NodeT() : first_out(-1), first_in(-1) {}
1.35 };
1.36
1.37 - typedef typename Graph::template NodeMap<NodeT> NodesImplBase;
1.38 + typedef DefaultMap<Graph, Node, NodeT> NodesImplBase;
1.39
1.40 NodesImplBase* nodes;
1.41
1.42 @@ -505,6 +512,12 @@
1.43 Node source(const Edge& edge) const { return edges[edge.id].source;}
1.44 Node target(const Edge& edge) const { return edges[edge.id].target;}
1.45
1.46 + typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier;
1.47 +
1.48 + NodeNotifier& getNotifier(Node) const {
1.49 + return graph->getNotifier(Node());
1.50 + }
1.51 +
1.52 template <typename _Value>
1.53 class NodeMap : public Graph::template NodeMap<_Value> {
1.54 public:
2.1 --- a/lemon/graph_utils.h Wed Mar 01 10:04:47 2006 +0000
2.2 +++ b/lemon/graph_utils.h Wed Mar 01 10:17:25 2006 +0000
2.3 @@ -28,7 +28,9 @@
2.4 #include <lemon/utility.h>
2.5 #include <lemon/maps.h>
2.6 #include <lemon/traits.h>
2.7 +
2.8 #include <lemon/bits/alteration_notifier.h>
2.9 +#include <lemon/bits/default_map.h>
2.10
2.11 ///\ingroup gutils
2.12 ///\file
2.13 @@ -900,8 +902,8 @@
2.14 #ifndef DOXYGEN
2.15 /// \param _Map A ReadWriteMap mapping from the item type to integer.
2.16 template <
2.17 - typename _Graph, typename _Item, typename _Value, typename _Map
2.18 - = typename ItemSetTraits<_Graph, _Item>::template Map<_Value>::Parent
2.19 + typename _Graph, typename _Item, typename _Value,
2.20 + typename _Map = DefaultMap<_Graph, _Item, _Value>
2.21 >
2.22 #else
2.23 template <typename _Graph, typename _Item, typename _Value>
2.24 @@ -1105,8 +1107,8 @@
2.25 #ifndef DOXYGEN
2.26 /// \param _Map A ReadWriteMap mapping from the item type to integer.
2.27 template <
2.28 - typename _Graph, typename _Item, typename _Map
2.29 - = typename ItemSetTraits<_Graph, _Item>::template Map<int>::Parent
2.30 + typename _Graph, typename _Item,
2.31 + typename _Map = DefaultMap<_Graph, _Item, int>
2.32 >
2.33 #else
2.34 template <typename _Graph, typename _Item>
2.35 @@ -1505,14 +1507,11 @@
2.36
2.37 private:
2.38
2.39 - class AutoNodeMap : public Graph::template NodeMap<int> {
2.40 + class AutoNodeMap : public DefaultMap<_Graph, Key, int> {
2.41 public:
2.42
2.43 - typedef typename Graph::template NodeMap<int> Parent;
2.44 + typedef DefaultMap<_Graph, Key, int> Parent;
2.45
2.46 - typedef typename Parent::Key Key;
2.47 - typedef typename Parent::Value Value;
2.48 -
2.49 AutoNodeMap(const Graph& graph) : Parent(graph, 0) {}
2.50
2.51 virtual void add(const Key& key) {
2.52 @@ -1622,14 +1621,11 @@
2.53
2.54 private:
2.55
2.56 - class AutoNodeMap : public Graph::template NodeMap<int> {
2.57 + class AutoNodeMap : public DefaultMap<_Graph, Key, int> {
2.58 public:
2.59
2.60 - typedef typename Graph::template NodeMap<int> Parent;
2.61 + typedef DefaultMap<_Graph, Key, int> Parent;
2.62
2.63 - typedef typename Parent::Key Key;
2.64 - typedef typename Parent::Value Value;
2.65 -
2.66 AutoNodeMap(const Graph& graph) : Parent(graph, 0) {}
2.67
2.68 virtual void add(const Key& key) {
2.69 @@ -1663,7 +1659,7 @@
2.70 ObserverBase::detach();
2.71 }
2.72
2.73 - /// Gives back the in-degree of a Node.
2.74 + /// Gives back the out-degree of a Node.
2.75 int operator[](const Key& key) const {
2.76 return deg[key];
2.77 }
3.1 --- a/lemon/iterable_maps.h Wed Mar 01 10:04:47 2006 +0000
3.2 +++ b/lemon/iterable_maps.h Wed Mar 01 10:17:25 2006 +0000
3.3 @@ -19,6 +19,8 @@
3.4 #include <lemon/traits.h>
3.5 #include <lemon/invalid.h>
3.6
3.7 +#include <lemon/bits/default_map.h>
3.8 +
3.9 #include <vector>
3.10 #include <map>
3.11
3.12 @@ -47,14 +49,12 @@
3.13 /// \param _Graph The graph type.
3.14 /// \param _Item One of the graph's item type, the key of the map.
3.15 template <typename _Graph, typename _Item>
3.16 - class IterableBoolMap
3.17 - : protected ItemSetTraits<_Graph, _Item>::template Map<int>::Parent {
3.18 + class IterableBoolMap : protected DefaultMap<_Graph, _Item, int> {
3.19 private:
3.20 typedef _Graph Graph;
3.21
3.22 typedef typename ItemSetTraits<Graph, _Item>::ItemIt KeyIt;
3.23 - typedef typename ItemSetTraits<Graph, _Item>
3.24 - ::template Map<int>::Parent Parent;
3.25 + typedef DefaultMap<_Graph, _Item, int> Parent;
3.26
3.27 std::vector<_Item> array;
3.28 int sep;
3.29 @@ -399,12 +399,13 @@
3.30 /// \param _Graph The graph type.
3.31 /// \param _Item One of the graph's item type, the key of the map.
3.32 template <typename _Graph, typename _Item>
3.33 - class IterableIntMap : protected ItemSetTraits<_Graph, _Item>
3.34 - ::template Map<_iterable_maps_bits::IterableIntMapNode<_Item> >::Parent {
3.35 + class IterableIntMap
3.36 + : protected DefaultMap<_Graph, _Item, _iterable_maps_bits::
3.37 + IterableIntMapNode<_Item> > {
3.38 public:
3.39 - typedef typename ItemSetTraits<_Graph, _Item>
3.40 - ::template Map<_iterable_maps_bits::IterableIntMapNode<_Item> >
3.41 - ::Parent Parent;
3.42 + typedef DefaultMap<_Graph, _Item, _iterable_maps_bits::
3.43 + IterableIntMapNode<_Item> >
3.44 + Parent;
3.45
3.46 /// The key type
3.47 typedef _Item Key;
3.48 @@ -687,13 +688,12 @@
3.49 /// \param _Item One of the graph's item type, the key of the map.
3.50 /// \param _Value Any comparable value type.
3.51 template <typename _Graph, typename _Item, typename _Value>
3.52 - class IterableValueMap : protected ItemSetTraits<_Graph, _Item>
3.53 - ::template Map<_iterable_maps_bits::IterableValueMapNode<_Item, _Value> >
3.54 - ::Parent {
3.55 + class IterableValueMap
3.56 + : protected DefaultMap<_Graph, _Item, _iterable_maps_bits::
3.57 + IterableValueMapNode<_Item, _Value> > {
3.58 public:
3.59 - typedef typename ItemSetTraits<_Graph, _Item>
3.60 - ::template Map<_iterable_maps_bits::IterableValueMapNode<_Item, _Value> >
3.61 - ::Parent Parent;
3.62 + typedef DefaultMap<_Graph, _Item, _iterable_maps_bits::
3.63 + IterableValueMapNode<_Item, _Value> > Parent;
3.64
3.65 /// The key type
3.66 typedef _Item Key;
3.67 @@ -702,19 +702,25 @@
3.68 /// The graph type
3.69 typedef _Graph Graph;
3.70
3.71 + protected:
3.72 +
3.73 + typedef typename ItemSetTraits<_Graph, Key>::ItemIt KeyIt;
3.74 +
3.75 + public:
3.76 +
3.77 /// \brief Constructor of the Map with a given value.
3.78 ///
3.79 /// Constructor of the Map with a given value.
3.80 explicit IterableValueMap(const Graph& graph,
3.81 const Value& value = Value())
3.82 - : Parent(graph, _iterable_maps_bits::IterableValueMapNode<_Item,
3.83 - _Value>(value)) {
3.84 - for (typename Parent::ItemIt it(*this); it != INVALID; ++it) {
3.85 + : Parent(graph, _iterable_maps_bits::
3.86 + IterableValueMapNode<_Item, _Value>(value)) {
3.87 + for (KeyIt it(*Parent::getGraph()); it != INVALID; ++it) {
3.88 lace(it);
3.89 }
3.90 }
3.91
3.92 - private:
3.93 + protected:
3.94
3.95 void unlace(const Key& key) {
3.96 typename Parent::Value& node = Parent::operator[](key);
3.97 @@ -871,6 +877,18 @@
3.98
3.99 protected:
3.100
3.101 + virtual void add(const Key& key) {
3.102 + Parent::add(key);
3.103 + unlace(key);
3.104 + }
3.105 +
3.106 + virtual void add(const std::vector<Key>& keys) {
3.107 + Parent::add(keys);
3.108 + for (int i = 0; i < (int)keys.size(); ++i) {
3.109 + lace(keys[i]);
3.110 + }
3.111 + }
3.112 +
3.113 virtual void erase(const Key& key) {
3.114 unlace(key);
3.115 Parent::erase(key);
3.116 @@ -883,6 +901,13 @@
3.117 Parent::erase(keys);
3.118 }
3.119
3.120 + virtual void build() {
3.121 + Parent::build();
3.122 + for (KeyIt it(*Parent::getGraph()); it != INVALID; ++it) {
3.123 + lace(it);
3.124 + }
3.125 + }
3.126 +
3.127 virtual void clear() {
3.128 first.clear();
3.129 Parent::clear();
4.1 --- a/lemon/sub_graph.h Wed Mar 01 10:04:47 2006 +0000
4.2 +++ b/lemon/sub_graph.h Wed Mar 01 10:17:25 2006 +0000
4.3 @@ -20,6 +20,8 @@
4.4 #define LEMON_SUB_GRAPH_H
4.5
4.6 #include <lemon/graph_adaptor.h>
4.7 +#include <lemon/bits/graph_adaptor_extender.h>
4.8 +#include <lemon/bits/default_map.h>
4.9
4.10 namespace lemon {
4.11
4.12 @@ -242,10 +244,10 @@
4.13 Node prev, next;
4.14 Edge firstIn, firstOut;
4.15 };
4.16 - class NodesImpl : public Graph::template NodeMap<NodeT> {
4.17 + class NodesImpl : public DefaultMap<Graph, Node, NodeT> {
4.18 friend class SubGraphBase;
4.19 public:
4.20 - typedef typename Graph::template NodeMap<NodeT> Parent;
4.21 + typedef DefaultMap<Graph, Node, NodeT> Parent;
4.22
4.23 NodesImpl(SubGraph& _adaptor, const Graph& _graph)
4.24 : Parent(_graph), adaptor(_adaptor) {}
4.25 @@ -305,10 +307,10 @@
4.26 Edge prevOut, nextOut;
4.27 Edge prevIn, nextIn;
4.28 };
4.29 - class EdgesImpl : public Graph::template EdgeMap<EdgeT> {
4.30 + class EdgesImpl : public DefaultMap<Graph, Edge, EdgeT> {
4.31 friend class SubGraphBase;
4.32 public:
4.33 - typedef typename Graph::template EdgeMap<EdgeT> Parent;
4.34 + typedef DefaultMap<Graph, Edge, EdgeT> Parent;
4.35
4.36 EdgesImpl(SubGraph& _adaptor, const Graph& _graph)
4.37 : Parent(_graph), adaptor(_adaptor) {}
4.38 @@ -560,10 +562,10 @@
4.39 struct NodeT {
4.40 Edge firstIn, firstOut;
4.41 };
4.42 - class NodesImpl : public Graph::template NodeMap<NodeT> {
4.43 + class NodesImpl : public DefaultMap<Graph, Node, NodeT> {
4.44 friend class EdgeSubGraphBase;
4.45 public:
4.46 - typedef typename Graph::template NodeMap<NodeT> Parent;
4.47 + typedef DefaultMap<Graph, Node, NodeT> Parent;
4.48
4.49 NodesImpl(SubGraph& _adaptor, const Graph& _graph)
4.50 : Parent(_graph), adaptor(_adaptor) {}
4.51 @@ -603,10 +605,10 @@
4.52 Edge prevOut, nextOut;
4.53 Edge prevIn, nextIn;
4.54 };
4.55 - class EdgesImpl : public Graph::template EdgeMap<EdgeT> {
4.56 + class EdgesImpl : public DefaultMap<Graph, Edge, EdgeT> {
4.57 friend class EdgeSubGraphBase;
4.58 public:
4.59 - typedef typename Graph::template EdgeMap<EdgeT> Parent;
4.60 + typedef DefaultMap<Graph, Edge, EdgeT> Parent;
4.61
4.62 EdgesImpl(SubGraph& _adaptor, const Graph& _graph)
4.63 : Parent(_graph), adaptor(_adaptor) {}
5.1 --- a/test/edge_set_test.cc Wed Mar 01 10:04:47 2006 +0000
5.2 +++ b/test/edge_set_test.cc Wed Mar 01 10:17:25 2006 +0000
5.3 @@ -17,7 +17,7 @@
5.4 using namespace lemon;
5.5 using namespace lemon::concept;
5.6
5.7 -typedef StaticGraph Graph;
5.8 +typedef SmartGraph Graph;
5.9
5.10 int main() {
5.11 { // checking edge_sets