Some modifications and another testfile.
6 ///\brief Miscellaneous property maps
8 ///\todo This file has the same name as the concept file in skeletons,
9 /// and this is not easily detectable in docs...
15 /// Null map. (aka DoNothingMap)
17 /// If you have to provide a map only for its type definitions,
18 /// or if you have to provide a writable map, but will not use the
19 /// data written to it...
20 template<typename K, typename T>
27 T operator[](const K&) const { return T(); }
28 void set(const K&, const T&) {}
29 ///\bug when update is removed from map concepts by being dynamic
30 ///stuffs, this line have to be removed.
37 /// This is a readable map which assignes a specified value to each key.
38 /// In other aspects it is equivalent to the \ref NullMap
39 template<typename K, typename T>
48 ConstMap(const T &_v) : v(_v) {}
50 T operator[](const K&) const { return v; }
51 void set(const K&, const T&) {}
55 typedef ConstMap<K,T1> other;
59 ConstMap(const ConstMap<K,T1> &, const T &_v) : v(_v) {}
64 /// \c std::map wrapper
66 /// This is essentially a wrapper for \c std::map. With addition that
67 /// you can specify a default value different from \c ValueType() .
69 /// \todo Provide allocator parameter...
70 template <typename Key, typename T, typename Compare = std::less<Key> >
71 class StdMap : public std::map<Key,T,Compare> {
72 typedef std::map<Key,T,Compare> parent;
74 typedef typename parent::value_type PairType;
79 typedef T& ReferenceType;
80 typedef const T& ConstReferenceType;
84 /// Constructor with specified default value
85 StdMap(const T& _v) : v(_v) {}
87 /// \brief Constructs the map from an appropriate std::map.
89 /// \warning Inefficient: copies the content of \c m !
90 StdMap(const parent &m) : parent(m) {}
91 /// \brief Constructs the map from an appropriate std::map, and explicitly
92 /// specifies a default value.
94 /// \warning Inefficient: copies the content of \c m !
95 StdMap(const parent &m, const T& _v) : parent(m), v(_v) {}
97 template<typename T1, typename Comp1>
98 StdMap(const StdMap<Key,T1,Comp1> &m, const T &_v) {
102 ReferenceType operator[](const Key &k) {
103 return insert(PairType(k,v)).first -> second;
105 ConstReferenceType operator[](const Key &k) const {
106 typename parent::iterator i = lower_bound(k);
107 if (i == parent::end() || parent::key_comp()(k, (*i).first))
111 void set(const Key &k, const T &t) {
112 parent::operator[](k) = t;
115 /// Changes the default value of the map.
116 /// \return Returns the previous default value.
118 /// \warning The value of some keys (which has alredy been queried, but
119 /// the value has been unchanged from the default) may change!
120 T setDefault(const T &_v) { T old=v; v=_v; return old; }
122 template<typename T1>
124 typedef StdMap<Key,T1,Compare> other;
129 #endif // HUGO_MAPS_H