The graph adadptors can be alteration observed.
In most cases it uses the adapted graph alteration notifiers.
Only special case is now the UndirGraphAdaptor, where
we have to proxy the signals from the graph.
The SubBidirGraphAdaptor is removed, because it doest not
gives more feature than the EdgeSubGraphAdaptor<UndirGraphAdaptor<Graph>>.
The ResGraphAdaptor is based on this composition.
3 * This file is a part of LEMON, a generic C++ optimization library
5 * Copyright (C) 2003-2006
6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 * (Egervary Research Group on Combinatorial Optimization, EGRES).
9 * Permission to use, modify and distribute this software is granted
10 * provided that this copyright notice appears in all copies. For
11 * precise terms see the accompanying LICENSE file.
13 * This software is provided "AS IS" with no warranty of any kind,
14 * express or implied, and with no claim as to its suitability for any
19 #ifndef LEMON_MAP_ITERATOR_H
20 #define LEMON_MAP_ITERATOR_H
22 #include <lemon/traits.h>
23 #include <lemon/utility.h>
27 /// \brief Iterators on the maps.
33 /// \brief Iterator for maps with possibility of changing values.
35 /// Iterator for maps with possibility of changing values.
36 template <typename Graph, typename Item, typename Map>
37 class MapIt : public ItemSetTraits<Graph, Item>::ItemIt {
40 typedef typename ItemSetTraits<Graph, Item>::ItemIt Parent;
42 typedef typename Map::Value Value;
44 /// \brief Creates an iterator
46 /// Creates an iterator for the map, which iterates on the
47 /// given graph item set.
48 MapIt(const Graph& _graph, Map& _map) : Parent(_graph), map(_map) {}
50 /// \brief Gives back the map's value on the current position.
52 /// Gives back the map's value on the current position.
53 typename MapTraits<Map>::ConstReturnValue operator*() const {
57 /// \brief Gives back a reference to the map's value.
59 /// Gives back a reference to the map's value on the current position.
60 typename MapTraits<Map>::ReturnValue operator*() {
64 /// \brief Sets the value on the current position
66 /// Sets the value on the current position.
67 void set(const Value& value) {
68 map.set(*this, value);
78 /// \brief Iterator for maps with possibility of getting values.
80 /// Iterator for maps with possibility of getting values.
81 template <typename Graph, typename Item, typename Map>
82 class ConstMapIt : public ItemSetTraits<Graph, Item>::ItemIt {
85 typedef typename ItemSetTraits<Graph, Item>::ItemIt Parent;
87 typedef typename Map::Value Value;
89 /// \brief Creates an iterator
91 /// Creates an iterator for the map, which iterates on the
92 /// given graph item set.
93 ConstMapIt(const Graph& _graph, const Map& _map)
94 : Parent(_graph), map(_map) {}
96 /// \brief Gives back the map's value on the current position.
98 /// Gives back the map's value on the current position.
99 typename MapTraits<Map>::ConstReturnValue operator*() const {
110 /// \brief Iterator for maps which filters items by the values.
112 /// Iterator for maps which gives back only that items which mapped
113 /// to an given value.
114 template <typename Graph, typename Item, typename Map>
116 : public ItemSetTraits<Graph, Item>::ItemIt {
119 typedef typename ItemSetTraits<Graph, Item>::ItemIt Parent;
121 typedef typename Map::Value Value;
123 /// \brief Creates an iterator
125 /// Creates an iterator for the map, which iterates on the
126 /// given graph item set and filters all items which mapped value
127 /// differ from \c _value.
128 FilterMapIt(const Graph& _graph, const Map& _map, const Value& _value)
129 : Parent(_graph), map(_map), value(_value) {}
131 /// \brief Increment operator
133 /// Skips items which has not the given value.
134 FilterMapIt& operator++() {
135 Parent::operator++();
136 while (*this != INVALID && map[*this] != value) Parent::operator++();