Changes in lemon/concepts/maps.h [51:90201bb15a8d:79:d73c2e8b25cb] in lemon
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/concepts/maps.h
r51 r79 30 30 31 31 namespace concepts { 32 32 33 33 /// \addtogroup concept 34 34 /// @{ … … 43 43 public: 44 44 /// The key type of the map. 45 typedef K Key; 46 /// The value type of the map. (The type of objects associated with the keys). 47 typedef T Value; 48 49 /// Returns the value associated with a key. 50 51 /// Returns the value associated with a key. 52 /// \bug Value shouldn't need to be default constructible. 53 /// 54 Value operator[](const Key &) const {return Value();} 45 typedef K Key; 46 /// The value type of the map. (The type of objects associated with the keys). 47 typedef T Value; 48 49 /// Returns the value associated with the given key. 50 51 /// Returns the value associated with the given key. 52 /// \bug Value shouldn't need to be default constructible. 53 Value operator[](const Key &) const { return Value(); } 55 54 56 55 template<typename _ReadMap> 57 56 struct Constraints { 58 59 57 void constraints() { 60 58 Value val = m[key]; 61 59 val = m[key]; 62 typename _ReadMap::Value own_val = m[own_key]; 63 own_val = m[own_key]; 64 65 ignore_unused_variable_warning(val); 66 ignore_unused_variable_warning(own_val); 67 ignore_unused_variable_warning(key); 68 } 69 Key& key; 70 typename _ReadMap::Key& own_key; 71 _ReadMap& m; 72 }; 73 74 }; 75 76 77 /// Writable map concept 78 79 /// Writable map concept. 80 /// 81 template<typename K, typename T> 82 class WriteMap 83 { 84 public: 85 /// The key type of the map. 86 typedef K Key; 87 /// The value type of the map. (The type of objects associated with the keys). 88 typedef T Value; 89 90 /// Sets the value associated with a key. 91 void set(const Key &,const Value &) {} 92 93 ///Default constructor 94 WriteMap() {} 95 96 template <typename _WriteMap> 97 struct Constraints { 98 void constraints() { 99 // No constraints for constructor. 100 m.set(key, val); 101 m.set(own_key, own_val); 60 typename _ReadMap::Value own_val = m[own_key]; 61 own_val = m[own_key]; 62 102 63 ignore_unused_variable_warning(key); 103 64 ignore_unused_variable_warning(val); … … 105 66 ignore_unused_variable_warning(own_val); 106 67 } 107 108 Value& val; 109 typename _WriteMap::Value own_val; 110 Key& key; 111 typename _WriteMap::Key& own_key; 68 const Key& key; 69 const typename _ReadMap::Key& own_key; 70 const _ReadMap& m; 71 }; 72 73 }; 74 75 76 /// Writable map concept 77 78 /// Writable map concept. 79 /// 80 template<typename K, typename T> 81 class WriteMap 82 { 83 public: 84 /// The key type of the map. 85 typedef K Key; 86 /// The value type of the map. (The type of objects associated with the keys). 87 typedef T Value; 88 89 /// Sets the value associated with the given key. 90 void set(const Key &, const Value &) {} 91 92 /// Default constructor. 93 WriteMap() {} 94 95 template <typename _WriteMap> 96 struct Constraints { 97 void constraints() { 98 m.set(key, val); 99 m.set(own_key, own_val); 100 101 ignore_unused_variable_warning(key); 102 ignore_unused_variable_warning(val); 103 ignore_unused_variable_warning(own_key); 104 ignore_unused_variable_warning(own_val); 105 } 106 const Key& key; 107 const Value& val; 108 const typename _WriteMap::Key& own_key; 109 const typename _WriteMap::Value own_val; 112 110 _WriteMap& m; 113 114 111 }; 115 112 }; 116 113 117 114 /// Read/writable map concept 118 115 119 116 /// Read/writable map concept. 120 117 /// … … 125 122 public: 126 123 /// The key type of the map. 127 typedef K Key; 128 /// The value type of the map. (The type of objects associated with the keys). 129 typedef T Value; 130 131 /// Returns the value associated with a key. 132 Value operator[](const Key &) const {return Value();} 133 /// Sets the value associated with a key. 134 void set(const Key & ,const Value &) {} 124 typedef K Key; 125 /// The value type of the map. (The type of objects associated with the keys). 126 typedef T Value; 127 128 /// Returns the value associated with the given key. 129 Value operator[](const Key &) const { return Value(); } 130 131 /// Sets the value associated with the given key. 132 void set(const Key &, const Value &) {} 135 133 136 134 template<typename _ReadWriteMap> … … 142 140 }; 143 141 }; 144 145 142 143 146 144 /// Dereferable map concept 147 145 148 146 /// Dereferable map concept. 149 147 /// 150 /// \todo Rethink this concept.151 148 template<typename K, typename T, typename R, typename CR> 152 149 class ReferenceMap : public ReadWriteMap<K,T> … … 156 153 typedef True ReferenceMapTag; 157 154 /// The key type of the map. 158 typedef K Key; 155 typedef K Key; 159 156 /// The value type of the map. (The type of objects associated with the keys). 160 157 typedef T Value; … … 168 165 public: 169 166 170 /// Returns a reference to the value associated with akey.167 /// Returns a reference to the value associated with the given key. 171 168 Reference operator[](const Key &) { return tmp; } 172 ///Returns a const reference to the value associated with a key. 169 170 /// Returns a const reference to the value associated with the given key. 173 171 ConstReference operator[](const Key &) const { return tmp; } 174 /// Sets the value associated with a key. 172 173 /// Sets the value associated with the given key. 175 174 void set(const Key &k,const Value &t) { operator[](k)=t; } 176 175 177 176 template<typename _ReferenceMap> 178 struct ReferenceMapConcept{179 180 void constraints() {181 checkConcept<ReadWriteMap, _ReferenceMap >();177 struct Constraints { 178 void constraints() { 179 checkConcept<ReadWriteMap<K, T>, _ReferenceMap >(); 180 ref = m[key]; 182 181 m[key] = val; 183 val = m[key];184 182 m[key] = ref; 185 ref = m[key]; 183 m[key] = cref; 184 own_ref = m[own_key]; 186 185 m[own_key] = own_val; 187 own_val = m[own_key];188 186 m[own_key] = own_ref; 189 own_ref = m[own_key]; 190 } 191 192 typename _ReferenceMap::Key& own_key; 187 m[own_key] = own_cref; 188 m[key] = m[own_key]; 189 m[own_key] = m[key]; 190 } 191 const Key& key; 192 Value& val; 193 Reference ref; 194 ConstReference cref; 195 const typename _ReferenceMap::Key& own_key; 193 196 typename _ReferenceMap::Value& own_val; 194 typename _ReferenceMap::Reference& own_ref; 195 Key& key; 196 Value& val; 197 Reference& ref; 197 typename _ReferenceMap::Reference own_ref; 198 typename _ReferenceMap::ConstReference own_cref; 198 199 _ReferenceMap& m; 199 200 };
Note: See TracChangeset
for help on using the changeset viewer.