Correcting the structure of the graph's and adaptor's map.
The template assign operators and map iterators can be used for adaptors also.
Some bugfix in the adaptors
New class SwapBpUGraphAdaptor which swaps the two nodeset of the graph.
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_CONCEPT_MAPS_H
20 #define LEMON_CONCEPT_MAPS_H
22 #include <lemon/bits/utility.h>
23 #include <lemon/concept_check.h>
27 ///\brief Map concepts checking classes for testing and documenting.
33 /// \addtogroup concept
36 /// Readable map concept
37 template<typename K, typename T>
43 /// Map's value type. (The type of objects associated with the keys).
46 // \bug Value don't need to be default constructible.
47 /// Returns the value associated with a key.
48 Value operator[](const Key &) const {return Value();}
50 template<typename _ReadMap>
56 typename _ReadMap::Value own_val = m[own_key];
59 ignore_unused_variable_warning(val);
60 ignore_unused_variable_warning(own_val);
61 ignore_unused_variable_warning(key);
64 typename _ReadMap::Key& own_key;
71 /// Writable map concept
72 template<typename K, typename T>
78 /// Map's value type. (The type of objects associated with the keys).
81 /// Sets the value associated with a key.
82 void set(const Key &,const Value &) {}
84 ///Default constructor
87 template <typename _WriteMap>
90 // No constraints for constructor.
92 m.set(own_key, own_val);
93 ignore_unused_variable_warning(key);
94 ignore_unused_variable_warning(val);
95 ignore_unused_variable_warning(own_key);
96 ignore_unused_variable_warning(own_val);
100 typename _WriteMap::Value own_val;
102 typename _WriteMap::Key& own_key;
108 ///Read/Writable map concept
109 template<typename K, typename T>
110 class ReadWriteMap : public ReadMap<K,T>,
116 /// Map's value type. (The type of objects associated with the keys).
119 /// Returns the value associated with a key.
120 Value operator[](const Key &) const {return Value();}
121 /// Sets the value associated with a key.
122 void set(const Key & ,const Value &) {}
124 template<typename _ReadWriteMap>
127 checkConcept<ReadMap<K, T>, _ReadWriteMap >();
128 checkConcept<WriteMap<K, T>, _ReadWriteMap >();
134 ///Dereferable map concept
135 template<typename K, typename T, typename R, typename CR>
136 class ReferenceMap : public ReadWriteMap<K,T>
139 /// Tag for reference maps.
140 typedef True ReferenceMapTag;
143 /// Map's value type. (The type of objects associated with the keys).
145 /// Map's reference type.
147 /// Map's const reference type.
148 typedef CR ConstReference;
154 ///Returns a reference to the value associated to a key.
155 Reference operator[](const Key &) { return tmp; }
156 ///Returns a const reference to the value associated to a key.
157 ConstReference operator[](const Key &) const
159 /// Sets the value associated with a key.
160 void set(const Key &k,const Value &t) { operator[](k)=t; }
162 // \todo rethink this concept
163 template<typename _ReferenceMap>
164 struct ReferenceMapConcept {
167 checkConcept<ReadWriteMap, _ReferenceMap >();
172 m[own_key] = own_val;
173 own_val = m[own_key];
174 m[own_key] = own_ref;
175 own_ref = m[own_key];
178 typename _ReferenceMap::Key& own_key;
179 typename _ReferenceMap::Value& own_val;
180 typename _ReferenceMap::Reference& own_ref;
190 } //namespace concept
192 #endif // LEMON_CONCEPT_MAPS_H