79 } |
79 } |
80 |
80 |
81 |
81 |
82 /// Constant map. |
82 /// Constant map. |
83 |
83 |
84 /// This is a readable map which assigns a specified value to each key. |
84 /// This is a \ref concepts::ReadMap "readable" map which assigns a |
85 /// In other aspects it is equivalent to the \c NullMap. |
85 /// specified value to each key. |
|
86 /// In other aspects it is equivalent to \c NullMap. |
86 template<typename K, typename T> |
87 template<typename K, typename T> |
87 class ConstMap : public MapBase<K, T> { |
88 class ConstMap : public MapBase<K, T> { |
88 private: |
89 private: |
89 T v; |
90 T v; |
90 public: |
91 public: |
131 template<typename T, T v> |
132 template<typename T, T v> |
132 struct Const { }; |
133 struct Const { }; |
133 |
134 |
134 /// Constant map with inlined constant value. |
135 /// Constant map with inlined constant value. |
135 |
136 |
136 /// This is a readable map which assigns a specified value to each key. |
137 /// This is a \ref concepts::ReadMap "readable" map which assigns a |
137 /// In other aspects it is equivalent to the \c NullMap. |
138 /// specified value to each key. |
|
139 /// In other aspects it is equivalent to \c NullMap. |
138 template<typename K, typename V, V v> |
140 template<typename K, typename V, V v> |
139 class ConstMap<K, Const<V, v> > : public MapBase<K, V> { |
141 class ConstMap<K, Const<V, v> > : public MapBase<K, V> { |
140 public: |
142 public: |
141 typedef MapBase<K, V> Parent; |
143 typedef MapBase<K, V> Parent; |
142 typedef typename Parent::Key Key; |
144 typedef typename Parent::Key Key; |
147 V operator[](const K&) const { return v; } |
149 V operator[](const K&) const { return v; } |
148 ///\e |
150 ///\e |
149 void set(const K&, const V&) { } |
151 void set(const K&, const V&) { } |
150 }; |
152 }; |
151 |
153 |
152 ///Returns a \c ConstMap class |
154 ///Returns a \c ConstMap class with inlined value |
153 |
155 |
154 ///This function just returns a \c ConstMap class with inlined value. |
156 ///This function just returns a \c ConstMap class with inlined value. |
155 ///\relates ConstMap |
157 ///\relates ConstMap |
156 template<typename K, typename V, V v> |
158 template<typename K, typename V, V v> |
157 inline ConstMap<K, Const<V, v> > constMap() { |
159 inline ConstMap<K, Const<V, v> > constMap() { |
158 return ConstMap<K, Const<V, v> >(); |
160 return ConstMap<K, Const<V, v> >(); |
159 } |
161 } |
160 |
162 |
161 ///Map based on std::map |
163 ///Map based on \c std::map |
162 |
164 |
163 ///This is essentially a wrapper for \c std::map with addition that |
165 ///This is essentially a wrapper for \c std::map with addition that |
164 ///you can specify a default value different from \c Value(). |
166 ///you can specify a default value different from \c Value(). |
|
167 ///It meets the \ref concepts::ReferenceMap "ReferenceMap" concept. |
165 template <typename K, typename T, typename Compare = std::less<K> > |
168 template <typename K, typename T, typename Compare = std::less<K> > |
166 class StdMap { |
169 class StdMap : public MapBase<K, T> { |
167 template <typename K1, typename T1, typename C1> |
170 template <typename K1, typename T1, typename C1> |
168 friend class StdMap; |
171 friend class StdMap; |
169 public: |
172 public: |
170 |
173 |
171 typedef True ReferenceMapTag; |
174 typedef MapBase<K, T> Parent; |
172 ///Key type |
175 ///Key type |
173 typedef K Key; |
176 typedef typename Parent::Key Key; |
174 ///Value type |
177 ///Value type |
175 typedef T Value; |
178 typedef typename Parent::Value Value; |
176 ///Reference Type |
179 ///Reference Type |
177 typedef T& Reference; |
180 typedef T& Reference; |
178 ///Const reference type |
181 ///Const reference type |
179 typedef const T& ConstReference; |
182 typedef const T& ConstReference; |
|
183 |
|
184 typedef True ReferenceMapTag; |
180 |
185 |
181 private: |
186 private: |
182 |
187 |
183 typedef std::map<K, T, Compare> Map; |
188 typedef std::map<K, T, Compare> Map; |
184 Value _value; |
189 Value _value; |
186 |
191 |
187 public: |
192 public: |
188 |
193 |
189 /// Constructor with specified default value |
194 /// Constructor with specified default value |
190 StdMap(const T& value = T()) : _value(value) {} |
195 StdMap(const T& value = T()) : _value(value) {} |
191 /// \brief Constructs the map from an appropriate std::map, and explicitly |
196 /// \brief Constructs the map from an appropriate \c std::map, and |
192 /// specifies a default value. |
197 /// explicitly specifies a default value. |
193 template <typename T1, typename Comp1> |
198 template <typename T1, typename Comp1> |
194 StdMap(const std::map<Key, T1, Comp1> &map, const T& value = T()) |
199 StdMap(const std::map<Key, T1, Comp1> &map, const T& value = T()) |
195 : _map(map.begin(), map.end()), _value(value) {} |
200 : _map(map.begin(), map.end()), _value(value) {} |
196 |
201 |
197 /// \brief Constructs a map from an other StdMap. |
202 /// \brief Constructs a map from an other \ref StdMap. |
198 template<typename T1, typename Comp1> |
203 template<typename T1, typename Comp1> |
199 StdMap(const StdMap<Key, T1, Comp1> &c) |
204 StdMap(const StdMap<Key, T1, Comp1> &c) |
200 : _map(c._map.begin(), c._map.end()), _value(c._value) {} |
205 : _map(c._map.begin(), c._map.end()), _value(c._value) {} |
201 |
206 |
202 private: |
207 private: |
237 _value = t; |
242 _value = t; |
238 _map.clear(); |
243 _map.clear(); |
239 } |
244 } |
240 |
245 |
241 }; |
246 }; |
|
247 |
|
248 ///Returns a \c StdMap class |
|
249 |
|
250 ///This function just returns a \c StdMap class with specified |
|
251 ///default value. |
|
252 ///\relates StdMap |
|
253 template<typename K, typename V, typename Compare = std::less<K> > |
|
254 inline StdMap<K, V, Compare> stdMap(const V& value = V()) { |
|
255 return StdMap<K, V, Compare>(value); |
|
256 } |
|
257 |
|
258 ///Returns a \c StdMap class created from an appropriate std::map |
|
259 |
|
260 ///This function just returns a \c StdMap class created from an |
|
261 ///appropriate std::map. |
|
262 ///\relates StdMap |
|
263 template<typename K, typename V, typename Compare = std::less<K> > |
|
264 inline StdMap<K, V, Compare> stdMap( const std::map<K, V, Compare> &map, |
|
265 const V& value = V() ) { |
|
266 return StdMap<K, V, Compare>(map, value); |
|
267 } |
242 |
268 |
243 /// \brief Map for storing values for keys from the range <tt>[0..size-1]</tt> |
269 /// \brief Map for storing values for keys from the range <tt>[0..size-1]</tt> |
244 /// |
270 /// |
245 /// The current map has the <tt>[0..size-1]</tt> keyset and the values |
271 /// This map has the <tt>[0..size-1]</tt> keyset and the values |
246 /// are stored in a \c std::vector<T> container. It can be used with |
272 /// are stored in a \c std::vector<T> container. It can be used with |
247 /// some data structures, for example \c UnionFind, \c BinHeap, when |
273 /// some data structures, for example \c UnionFind, \c BinHeap, when |
248 /// the used items are small integer numbers. |
274 /// the used items are small integer numbers. |
|
275 /// This map meets the \ref concepts::ReferenceMap "ReferenceMap" concept. |
249 /// |
276 /// |
250 /// \todo Revise its name |
277 /// \todo Revise its name |
251 template <typename T> |
278 template <typename T> |
252 class IntegerMap { |
279 class IntegerMap : public MapBase<int, T> { |
253 |
280 |
254 template <typename T1> |
281 template <typename T1> |
255 friend class IntegerMap; |
282 friend class IntegerMap; |
256 |
283 |
257 public: |
284 public: |
258 |
285 |
|
286 typedef MapBase<int, T> Parent; |
|
287 ///\e |
|
288 typedef typename Parent::Key Key; |
|
289 ///\e |
|
290 typedef typename Parent::Value Value; |
|
291 ///\e |
|
292 typedef T& Reference; |
|
293 ///\e |
|
294 typedef const T& ConstReference; |
|
295 |
259 typedef True ReferenceMapTag; |
296 typedef True ReferenceMapTag; |
260 ///\e |
|
261 typedef int Key; |
|
262 ///\e |
|
263 typedef T Value; |
|
264 ///\e |
|
265 typedef T& Reference; |
|
266 ///\e |
|
267 typedef const T& ConstReference; |
|
268 |
297 |
269 private: |
298 private: |
270 |
299 |
271 typedef std::vector<T> Vector; |
300 typedef std::vector<T> Vector; |
272 Vector _vector; |
301 Vector _vector; |
274 public: |
303 public: |
275 |
304 |
276 /// Constructor with specified default value |
305 /// Constructor with specified default value |
277 IntegerMap(int size = 0, const T& value = T()) : _vector(size, value) {} |
306 IntegerMap(int size = 0, const T& value = T()) : _vector(size, value) {} |
278 |
307 |
279 /// \brief Constructs the map from an appropriate std::vector. |
308 /// \brief Constructs the map from an appropriate \c std::vector. |
280 template <typename T1> |
309 template <typename T1> |
281 IntegerMap(const std::vector<T1>& vector) |
310 IntegerMap(const std::vector<T1>& vector) |
282 : _vector(vector.begin(), vector.end()) {} |
311 : _vector(vector.begin(), vector.end()) {} |
283 |
312 |
284 /// \brief Constructs a map from an other IntegerMap. |
313 /// \brief Constructs a map from an other \ref IntegerMap. |
285 template <typename T1> |
314 template <typename T1> |
286 IntegerMap(const IntegerMap<T1> &c) |
315 IntegerMap(const IntegerMap<T1> &c) |
287 : _vector(c._vector.begin(), c._vector.end()) {} |
316 : _vector(c._vector.begin(), c._vector.end()) {} |
288 |
317 |
289 /// \brief Resize the container |
318 /// \brief Resize the container |
347 |
385 |
348 |
386 |
349 ///\brief Convert the \c Value of a map to another type using |
387 ///\brief Convert the \c Value of a map to another type using |
350 ///the default conversion. |
388 ///the default conversion. |
351 /// |
389 /// |
352 ///This \c concepts::ReadMap "read only map" |
390 ///This \ref concepts::ReadMap "read only map" |
353 ///converts the \c Value of a map to type \c T. |
391 ///converts the \c Value of a map to type \c T. |
354 ///Its \c Key is inherited from \c M. |
392 ///Its \c Key is inherited from \c M. |
355 template <typename M, typename T> |
393 template <typename M, typename T> |
356 class ConvertMap : public MapBase<typename M::Key, T> { |
394 class ConvertMap : public MapBase<typename M::Key, T> { |
357 const M& m; |
395 const M& m; |
403 ///Constructor |
439 ///Constructor |
404 SimpleMap(const M &_m) : m(_m) {}; |
440 SimpleMap(const M &_m) : m(_m) {}; |
405 ///\e |
441 ///\e |
406 Value operator[](Key k) const {return m[k];} |
442 Value operator[](Key k) const {return m[k];} |
407 }; |
443 }; |
|
444 |
|
445 ///Returns a \c SimpleMap class |
|
446 |
|
447 ///This function just returns a \c SimpleMap class. |
|
448 ///\relates SimpleMap |
|
449 template<typename M> |
|
450 inline SimpleMap<M> simpleMap(const M &m) { |
|
451 return SimpleMap<M>(m); |
|
452 } |
408 |
453 |
409 ///Simple writable wrapping of a map |
454 ///Simple writable wrapping of a map |
410 |
455 |
411 ///This \ref concepts::WriteMap "write map" returns the simple |
456 ///This \ref concepts::ReadWriteMap "read-write map" returns the simple |
412 ///wrapping of the given map. Sometimes the reference maps cannot be |
457 ///wrapping of the given map. Sometimes the reference maps cannot be |
413 ///combined with simple read-write maps. This map adaptor wraps the |
458 ///combined with simple read-write maps. This map adaptor wraps the |
414 ///given map to simple read-write map. |
459 ///given map to simple read-write map. |
415 /// |
460 /// |
416 ///\sa SimpleMap |
461 ///\sa SimpleMap |
431 Value operator[](Key k) const {return m[k];} |
476 Value operator[](Key k) const {return m[k];} |
432 ///\e |
477 ///\e |
433 void set(Key k, const Value& c) { m.set(k, c); } |
478 void set(Key k, const Value& c) { m.set(k, c); } |
434 }; |
479 }; |
435 |
480 |
|
481 ///Returns a \c SimpleWriteMap class |
|
482 |
|
483 ///This function just returns a \c SimpleWriteMap class. |
|
484 ///\relates SimpleWriteMap |
|
485 template<typename M> |
|
486 inline SimpleWriteMap<M> simpleWriteMap(M &m) { |
|
487 return SimpleWriteMap<M>(m); |
|
488 } |
|
489 |
436 ///Sum of two maps |
490 ///Sum of two maps |
437 |
491 |
438 ///This \c concepts::ReadMap "read only map" returns the sum of the two |
492 ///This \ref concepts::ReadMap "read only map" returns the sum of the two |
439 ///given maps. |
493 ///given maps. |
440 ///Its \c Key and \c Value are inherited from \c M1. |
494 ///Its \c Key and \c Value are inherited from \c M1. |
441 ///The \c Key and \c Value of M2 must be convertible to those of \c M1. |
495 ///The \c Key and \c Value of \c M2 must be convertible to those of \c M1. |
442 template<typename M1, typename M2> |
496 template<typename M1, typename M2> |
443 class AddMap : public MapBase<typename M1::Key, typename M1::Value> { |
497 class AddMap : public MapBase<typename M1::Key, typename M1::Value> { |
444 const M1& m1; |
498 const M1& m1; |
445 const M2& m2; |
499 const M2& m2; |
446 |
500 |
456 }; |
510 }; |
457 |
511 |
458 ///Returns an \c AddMap class |
512 ///Returns an \c AddMap class |
459 |
513 |
460 ///This function just returns an \c AddMap class. |
514 ///This function just returns an \c AddMap class. |
461 ///\todo How to call these type of functions? |
515 ///\todo Extend the documentation: how to call these type of functions? |
462 /// |
516 /// |
463 ///\relates AddMap |
517 ///\relates AddMap |
464 template<typename M1, typename M2> |
518 template<typename M1, typename M2> |
465 inline AddMap<M1, M2> addMap(const M1 &m1,const M2 &m2) { |
519 inline AddMap<M1, M2> addMap(const M1 &m1,const M2 &m2) { |
466 return AddMap<M1, M2>(m1,m2); |
520 return AddMap<M1, M2>(m1,m2); |
467 } |
521 } |
468 |
522 |
469 ///Shift a map with a constant. |
523 ///Shift a map with a constant. |
470 |
524 |
471 ///This \c concepts::ReadMap "read only map" returns the sum of the |
525 ///This \ref concepts::ReadMap "read only map" returns the sum of the |
472 ///given map and a constant value. |
526 ///given map and a constant value. |
473 ///Its \c Key and \c Value are inherited from \c M. |
527 ///Its \c Key and \c Value are inherited from \c M. |
474 /// |
528 /// |
475 ///Actually, |
529 ///Actually, |
476 ///\code |
530 ///\code |
502 Value operator[](Key k) const {return m[k] + v;} |
556 Value operator[](Key k) const {return m[k] + v;} |
503 }; |
557 }; |
504 |
558 |
505 ///Shift a map with a constant (ReadWrite version). |
559 ///Shift a map with a constant (ReadWrite version). |
506 |
560 |
507 ///This \c concepts::ReadWriteMap "read-write map" returns the sum of the |
561 ///This \ref concepts::ReadWriteMap "read-write map" returns the sum of the |
508 ///given map and a constant value. It makes also possible to write the map. |
562 ///given map and a constant value. It makes also possible to write the map. |
509 ///Its \c Key and \c Value are inherited from \c M. |
563 ///Its \c Key and \c Value are inherited from \c M. |
510 /// |
564 /// |
511 ///\sa ShiftMap |
565 ///\sa ShiftMap |
512 template<typename M, typename C = typename M::Value> |
566 template<typename M, typename C = typename M::Value> |
548 return ShiftWriteMap<M, C>(m,v); |
602 return ShiftWriteMap<M, C>(m,v); |
549 } |
603 } |
550 |
604 |
551 ///Difference of two maps |
605 ///Difference of two maps |
552 |
606 |
553 ///This \c concepts::ReadMap "read only map" returns the difference |
607 ///This \ref concepts::ReadMap "read only map" returns the difference |
554 ///of the values of the two given maps. |
608 ///of the values of the two given maps. |
555 ///Its \c Key and \c Value are inherited from \c M1. |
609 ///Its \c Key and \c Value are inherited from \c M1. |
556 ///The \c Key and \c Value of \c M2 must be convertible to those of \c M1. |
610 ///The \c Key and \c Value of \c M2 must be convertible to those of \c M1. |
557 /// |
611 /// |
558 /// \todo Revise the misleading name |
612 /// \todo Revise the misleading name |
581 return SubMap<M1, M2>(m1, m2); |
635 return SubMap<M1, M2>(m1, m2); |
582 } |
636 } |
583 |
637 |
584 ///Product of two maps |
638 ///Product of two maps |
585 |
639 |
586 ///This \c concepts::ReadMap "read only map" returns the product of the |
640 ///This \ref concepts::ReadMap "read only map" returns the product of the |
587 ///values of the two given maps. |
641 ///values of the two given maps. |
588 ///Its \c Key and \c Value are inherited from \c M1. |
642 ///Its \c Key and \c Value are inherited from \c M1. |
589 ///The \c Key and \c Value of \c M2 must be convertible to those of \c M1. |
643 ///The \c Key and \c Value of \c M2 must be convertible to those of \c M1. |
590 template<typename M1, typename M2> |
644 template<typename M1, typename M2> |
591 class MulMap : public MapBase<typename M1::Key, typename M1::Value> { |
645 class MulMap : public MapBase<typename M1::Key, typename M1::Value> { |
611 return MulMap<M1, M2>(m1,m2); |
665 return MulMap<M1, M2>(m1,m2); |
612 } |
666 } |
613 |
667 |
614 ///Scales a map with a constant. |
668 ///Scales a map with a constant. |
615 |
669 |
616 ///This \c concepts::ReadMap "read only map" returns the value of the |
670 ///This \ref concepts::ReadMap "read only map" returns the value of the |
617 ///given map multiplied from the left side with a constant value. |
671 ///given map multiplied from the left side with a constant value. |
618 ///Its \c Key and \c Value are inherited from \c M. |
672 ///Its \c Key and \c Value are inherited from \c M. |
619 /// |
673 /// |
620 ///Actually, |
674 ///Actually, |
621 ///\code |
675 ///\code |
647 Value operator[](Key k) const {return v * m[k];} |
701 Value operator[](Key k) const {return v * m[k];} |
648 }; |
702 }; |
649 |
703 |
650 ///Scales a map with a constant (ReadWrite version). |
704 ///Scales a map with a constant (ReadWrite version). |
651 |
705 |
652 ///This \c concepts::ReadWriteMap "read-write map" returns the value of the |
706 ///This \ref concepts::ReadWriteMap "read-write map" returns the value of the |
653 ///given map multiplied from the left side with a constant value. It can |
707 ///given map multiplied from the left side with a constant value. It can |
654 ///also be used as write map if the \c / operator is defined between |
708 ///also be used as write map if the \c / operator is defined between |
655 ///\c Value and \c C and the given multiplier is not zero. |
709 ///\c Value and \c C and the given multiplier is not zero. |
656 ///Its \c Key and \c Value are inherited from \c M. |
710 ///Its \c Key and \c Value are inherited from \c M. |
657 /// |
711 /// |
695 return ScaleWriteMap<M, C>(m,v); |
749 return ScaleWriteMap<M, C>(m,v); |
696 } |
750 } |
697 |
751 |
698 ///Quotient of two maps |
752 ///Quotient of two maps |
699 |
753 |
700 ///This \c concepts::ReadMap "read only map" returns the quotient of the |
754 ///This \ref concepts::ReadMap "read only map" returns the quotient of the |
701 ///values of the two given maps. |
755 ///values of the two given maps. |
702 ///Its \c Key and \c Value are inherited from \c M1. |
756 ///Its \c Key and \c Value are inherited from \c M1. |
703 ///The \c Key and \c Value of \c M2 must be convertible to those of \c M1. |
757 ///The \c Key and \c Value of \c M2 must be convertible to those of \c M1. |
704 template<typename M1, typename M2> |
758 template<typename M1, typename M2> |
705 class DivMap : public MapBase<typename M1::Key, typename M1::Value> { |
759 class DivMap : public MapBase<typename M1::Key, typename M1::Value> { |
725 return DivMap<M1, M2>(m1,m2); |
779 return DivMap<M1, M2>(m1,m2); |
726 } |
780 } |
727 |
781 |
728 ///Composition of two maps |
782 ///Composition of two maps |
729 |
783 |
730 ///This \c concepts::ReadMap "read only map" returns the composition of |
784 ///This \ref concepts::ReadMap "read only map" returns the composition of |
731 ///two given maps. |
785 ///two given maps. |
732 ///That is to say, if \c m1 is of type \c M1 and \c m2 is of \c M2, |
786 ///That is to say, if \c m1 is of type \c M1 and \c m2 is of \c M2, |
733 ///then for |
787 ///then for |
734 ///\code |
788 ///\code |
735 /// ComposeMap<M1, M2> cm(m1,m2); |
789 /// ComposeMap<M1, M2> cm(m1,m2); |
776 |
830 |
777 ///Combine of two maps using an STL (binary) functor. |
831 ///Combine of two maps using an STL (binary) functor. |
778 |
832 |
779 ///Combine of two maps using an STL (binary) functor. |
833 ///Combine of two maps using an STL (binary) functor. |
780 /// |
834 /// |
781 ///This \c concepts::ReadMap "read only map" takes two maps and a |
835 ///This \ref concepts::ReadMap "read only map" takes two maps and a |
782 ///binary functor and returns the composition of the two |
836 ///binary functor and returns the composition of the two |
783 ///given maps unsing the functor. |
837 ///given maps unsing the functor. |
784 ///That is to say, if \c m1 and \c m2 is of type \c M1 and \c M2 |
838 ///That is to say, if \c m1 and \c m2 is of type \c M1 and \c M2 |
785 ///and \c f is of \c F, then for |
839 ///and \c f is of \c F, then for |
786 ///\code |
840 ///\code |
849 return combineMap<M1, M2, V (*)(K1, K2), V>(m1,m2,f); |
903 return combineMap<M1, M2, V (*)(K1, K2), V>(m1,m2,f); |
850 } |
904 } |
851 |
905 |
852 ///Negative value of a map |
906 ///Negative value of a map |
853 |
907 |
854 ///This \c concepts::ReadMap "read only map" returns the negative |
908 ///This \ref concepts::ReadMap "read only map" returns the negative |
855 ///value of the value returned by the given map. |
909 ///value of the value returned by the given map. |
856 ///Its \c Key and \c Value are inherited from \c M. |
910 ///Its \c Key and \c Value are inherited from \c M. |
857 ///The unary \c - operator must be defined for \c Value, of course. |
911 ///The unary \c - operator must be defined for \c Value, of course. |
858 /// |
912 /// |
859 ///\sa NegWriteMap |
913 ///\sa NegWriteMap |
871 Value operator[](Key k) const {return -m[k];} |
925 Value operator[](Key k) const {return -m[k];} |
872 }; |
926 }; |
873 |
927 |
874 ///Negative value of a map (ReadWrite version) |
928 ///Negative value of a map (ReadWrite version) |
875 |
929 |
876 ///This \c concepts::ReadWriteMap "read-write map" returns the negative |
930 ///This \ref concepts::ReadWriteMap "read-write map" returns the negative |
877 ///value of the value returned by the given map. |
931 ///value of the value returned by the given map. |
878 ///Its \c Key and \c Value are inherited from \c M. |
932 ///Its \c Key and \c Value are inherited from \c M. |
879 ///The unary \c - operator must be defined for \c Value, of course. |
933 ///The unary \c - operator must be defined for \c Value, of course. |
880 /// |
934 /// |
881 /// \sa NegMap |
935 /// \sa NegMap |
913 return NegWriteMap<M>(m); |
967 return NegWriteMap<M>(m); |
914 } |
968 } |
915 |
969 |
916 ///Absolute value of a map |
970 ///Absolute value of a map |
917 |
971 |
918 ///This \c concepts::ReadMap "read only map" returns the absolute value |
972 ///This \ref concepts::ReadMap "read only map" returns the absolute value |
919 ///of the value returned by the given map. |
973 ///of the value returned by the given map. |
920 ///Its \c Key and \c Value are inherited from \c M. |
974 ///Its \c Key and \c Value are inherited from \c M. |
921 ///\c Value must be comparable to \c 0 and the unary \c - |
975 ///\c Value must be comparable to \c 0 and the unary \c - |
922 ///operator must be defined for it, of course. |
976 ///operator must be defined for it, of course. |
923 template<typename M> |
977 template<typename M> |
947 return AbsMap<M>(m); |
1001 return AbsMap<M>(m); |
948 } |
1002 } |
949 |
1003 |
950 ///Converts an STL style functor to a map |
1004 ///Converts an STL style functor to a map |
951 |
1005 |
952 ///This \c concepts::ReadMap "read only map" returns the value |
1006 ///This \ref concepts::ReadMap "read only map" returns the value |
953 ///of a given functor. |
1007 ///of a given functor. |
954 /// |
1008 /// |
955 ///Template parameters \c K and \c V will become its |
1009 ///Template parameters \c K and \c V will become its |
956 ///\c Key and \c Value. |
1010 ///\c Key and \c Value. |
957 ///In most cases they have to be given explicitly because a |
1011 ///In most cases they have to be given explicitly because a |
958 ///functor typically does not provide such typedefs. |
1012 ///functor typically does not provide \c argument_type and |
|
1013 ///\c result_type typedefs. |
959 /// |
1014 /// |
960 ///Parameter \c F is the type of the used functor. |
1015 ///Parameter \c F is the type of the used functor. |
961 /// |
1016 /// |
962 ///\sa MapFunctor |
1017 ///\sa MapFunctor |
963 template<typename F, |
1018 template<typename F, |
978 |
1033 |
979 ///Returns a \c FunctorMap class |
1034 ///Returns a \c FunctorMap class |
980 |
1035 |
981 ///This function just returns a \c FunctorMap class. |
1036 ///This function just returns a \c FunctorMap class. |
982 /// |
1037 /// |
983 ///It is specialized for adaptable function classes and |
1038 ///This function is specialized for adaptable binary function |
984 ///C++ functions. |
1039 ///classes and C++ functions. |
|
1040 /// |
985 ///\relates FunctorMap |
1041 ///\relates FunctorMap |
986 template<typename K, typename V, typename F> inline |
1042 template<typename K, typename V, typename F> inline |
987 FunctorMap<F, K, V> functorMap(const F &f) { |
1043 FunctorMap<F, K, V> functorMap(const F &f) { |
988 return FunctorMap<F, K, V>(f); |
1044 return FunctorMap<F, K, V>(f); |
989 } |
1045 } |
1002 |
1058 |
1003 |
1059 |
1004 ///Converts a map to an STL style (unary) functor |
1060 ///Converts a map to an STL style (unary) functor |
1005 |
1061 |
1006 ///This class Converts a map to an STL style (unary) functor. |
1062 ///This class Converts a map to an STL style (unary) functor. |
1007 ///that is it provides an <tt>operator()</tt> to read its values. |
1063 ///That is it provides an <tt>operator()</tt> to read its values. |
1008 /// |
1064 /// |
1009 ///For the sake of convenience it also works as |
1065 ///For the sake of convenience it also works as |
1010 ///a ususal \c concepts::ReadMap "readable map", |
1066 ///a ususal \ref concepts::ReadMap "readable map", |
1011 ///i.e. <tt>operator[]</tt> and the \c Key and \c Value typedefs also exist. |
1067 ///i.e. <tt>operator[]</tt> and the \c Key and \c Value typedefs also exist. |
1012 /// |
1068 /// |
1013 ///\sa FunctorMap |
1069 ///\sa FunctorMap |
1014 template <typename M> |
1070 template <typename M> |
1015 class MapFunctor : public MapBase<typename M::Key, typename M::Value> { |
1071 class MapFunctor : public MapBase<typename M::Key, typename M::Value> { |
1037 template<typename M> |
1093 template<typename M> |
1038 inline MapFunctor<M> mapFunctor(const M &m) { |
1094 inline MapFunctor<M> mapFunctor(const M &m) { |
1039 return MapFunctor<M>(m); |
1095 return MapFunctor<M>(m); |
1040 } |
1096 } |
1041 |
1097 |
1042 ///Applies all map setting operations to two maps |
1098 ///Just readable version of \ref ForkWriteMap |
1043 |
1099 |
1044 ///This map has two \c concepts::ReadMap "readable map" |
1100 ///This map has two \ref concepts::ReadMap "readable map" |
1045 ///parameters and each read request will be passed just to the |
1101 ///parameters and each read request will be passed just to the |
1046 ///first map. This class is the just readable map type of the ForkWriteMap. |
1102 ///first map. This class is the just readable map type of \c ForkWriteMap. |
1047 /// |
1103 /// |
1048 ///The \c Key and \c Value are inherited from \c M1. |
1104 ///The \c Key and \c Value are inherited from \c M1. |
1049 ///The \c Key and \c Value of M2 must be convertible from those of \c M1. |
1105 ///The \c Key and \c Value of \c M2 must be convertible from those of \c M1. |
1050 /// |
1106 /// |
1051 ///\sa ForkWriteMap |
1107 ///\sa ForkWriteMap |
1052 /// |
1108 /// |
1053 /// \todo Why is it needed? |
1109 /// \todo Why is it needed? |
1054 template<typename M1, typename M2> |
1110 template<typename M1, typename M2> |
1067 }; |
1123 }; |
1068 |
1124 |
1069 |
1125 |
1070 ///Applies all map setting operations to two maps |
1126 ///Applies all map setting operations to two maps |
1071 |
1127 |
1072 ///This map has two \c concepts::WriteMap "writable map" |
1128 ///This map has two \ref concepts::WriteMap "writable map" |
1073 ///parameters and each write request will be passed to both of them. |
1129 ///parameters and each write request will be passed to both of them. |
1074 ///If \c M1 is also \c concepts::ReadMap "readable", |
1130 ///If \c M1 is also \ref concepts::ReadMap "readable", |
1075 ///then the read operations will return the |
1131 ///then the read operations will return the |
1076 ///corresponding values of \c M1. |
1132 ///corresponding values of \c M1. |
1077 /// |
1133 /// |
1078 ///The \c Key and \c Value are inherited from \c M1. |
1134 ///The \c Key and \c Value are inherited from \c M1. |
1079 ///The \c Key and \c Value of M2 must be convertible from those of \c M1. |
1135 ///The \c Key and \c Value of \c M2 must be convertible from those of \c M1. |
1080 /// |
1136 /// |
1081 ///\sa ForkMap |
1137 ///\sa ForkMap |
1082 template<typename M1, typename M2> |
1138 template<typename M1, typename M2> |
1083 class ForkWriteMap : public MapBase<typename M1::Key, typename M1::Value> { |
1139 class ForkWriteMap : public MapBase<typename M1::Key, typename M1::Value> { |
1084 M1& m1; |
1140 M1& m1; |
1118 |
1174 |
1119 /* ************* BOOL MAPS ******************* */ |
1175 /* ************* BOOL MAPS ******************* */ |
1120 |
1176 |
1121 ///Logical 'not' of a map |
1177 ///Logical 'not' of a map |
1122 |
1178 |
1123 ///This bool \c concepts::ReadMap "read only map" returns the |
1179 ///This bool \ref concepts::ReadMap "read only map" returns the |
1124 ///logical negation of the value returned by the given map. |
1180 ///logical negation of the value returned by the given map. |
1125 ///Its \c Key is inherited from \c M, its Value is \c bool. |
1181 ///Its \c Key is inherited from \c M, its \c Value is \c bool. |
1126 /// |
1182 /// |
1127 ///\sa NotWriteMap |
1183 ///\sa NotWriteMap |
1128 template <typename M> |
1184 template <typename M> |
1129 class NotMap : public MapBase<typename M::Key, bool> { |
1185 class NotMap : public MapBase<typename M::Key, bool> { |
1130 const M& m; |
1186 const M& m; |
1139 Value operator[](Key k) const {return !m[k];} |
1195 Value operator[](Key k) const {return !m[k];} |
1140 }; |
1196 }; |
1141 |
1197 |
1142 ///Logical 'not' of a map (ReadWrie version) |
1198 ///Logical 'not' of a map (ReadWrie version) |
1143 |
1199 |
1144 ///This bool \c concepts::ReadWriteMap "read-write map" returns the |
1200 ///This bool \ref concepts::ReadWriteMap "read-write map" returns the |
1145 ///logical negation of the value returned by the given map. When it is set, |
1201 ///logical negation of the value returned by the given map. When it is set, |
1146 ///the opposite value is set to the original map. |
1202 ///the opposite value is set to the original map. |
1147 ///Its \c Key is inherited from \c M, its Value is \c bool. |
1203 ///Its \c Key is inherited from \c M, its \c Value is \c bool. |
1148 /// |
1204 /// |
1149 ///\sa NotMap |
1205 ///\sa NotMap |
1150 template <typename M> |
1206 template <typename M> |
1151 class NotWriteMap : public MapBase<typename M::Key, bool> { |
1207 class NotWriteMap : public MapBase<typename M::Key, bool> { |
1152 M& m; |
1208 M& m; |
1207 } |
1263 } |
1208 |
1264 |
1209 |
1265 |
1210 /// \brief Writable bool map for logging each \c true assigned element |
1266 /// \brief Writable bool map for logging each \c true assigned element |
1211 /// |
1267 /// |
1212 /// Writable bool map for logging each \c true assigned element, i.e it |
1268 /// A \ref concepts::ReadWriteMap "read-write" bool map for logging |
1213 /// copies all the keys set to \c true to the given iterator. |
1269 /// each \c true assigned element, i.e it copies all the keys set |
|
1270 /// to \c true to the given iterator. |
1214 /// |
1271 /// |
1215 /// \note The container of the iterator should contain space |
1272 /// \note The container of the iterator should contain space |
1216 /// for each element. |
1273 /// for each element. |
1217 /// |
1274 /// |
1218 /// The following example shows how you can write the edges found by the Prim |
1275 /// The following example shows how you can write the edges found by |
1219 /// algorithm directly |
1276 /// the \ref Prim algorithm directly to the standard output. |
1220 /// to the standard output. |
|
1221 ///\code |
1277 ///\code |
1222 /// typedef IdMap<Graph, Edge> EdgeIdMap; |
1278 /// typedef IdMap<Graph, Edge> EdgeIdMap; |
1223 /// EdgeIdMap edgeId(graph); |
1279 /// EdgeIdMap edgeId(graph); |
1224 /// |
1280 /// |
1225 /// typedef MapFunctor<EdgeIdMap> EdgeIdFunctor; |
1281 /// typedef MapFunctor<EdgeIdMap> EdgeIdFunctor; |