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&) {}
34 /// This is a readable map which assignes a specified value to each key.
35 /// In other aspects it is equivalent to the \ref NullMap
36 template<typename K, typename T>
45 ConstMap(const T &_v) : v(_v) {}
47 T operator[](const K&) const { return v; }
48 void set(const K&, const T&) {}
52 typedef ConstMap<K,T1> other;
56 ConstMap(const ConstMap<K,T1> &, const T &_v) : v(_v) {}
61 /// \c std::map wrapper
63 /// This is essentially a wrapper for \c std::map. With addition that
64 /// you can specify a default value different from \c ValueType() .
66 /// \todo Provide allocator parameter...
67 template <typename Key, typename T, typename Compare = std::less<Key> >
68 class StdMap : public std::map<Key,T,Compare> {
69 typedef std::map<Key,T,Compare> parent;
71 typedef typename parent::value_type PairType;
76 typedef T& ReferenceType;
77 typedef const T& ConstReferenceType;
81 /// Constructor with specified default value
82 StdMap(const T& _v) : v(_v) {}
84 /// \brief Constructs the map from an appropriate std::map.
86 /// \warning Inefficient: copies the content of \c m !
87 StdMap(const parent &m) : parent(m) {}
88 /// \brief Constructs the map from an appropriate std::map, and explicitly
89 /// specifies a default value.
91 /// \warning Inefficient: copies the content of \c m !
92 StdMap(const parent &m, const T& _v) : parent(m), v(_v) {}
94 template<typename T1, typename Comp1>
95 StdMap(const StdMap<Key,T1,Comp1> &m, const T &_v) { FIXME; }
97 ReferenceType operator[](const Key &k) {
98 return insert(PairType(k,v)).first -> second;
100 ConstReferenceType operator[](const Key &k) const {
101 typename parent::iterator i = lower_bound(__k);
102 if (i == end() || key_comp()(k, (*i).first))
106 void set(const Key &k, const T &t) {
107 parent::operator[](k) = t;
110 /// Changes the default value of the map.
111 /// \return Returns the previous default value.
113 /// \warning The value of some keys (which has alredy been queried, but
114 /// the value has been unchanged from the default) may change!
115 T setDefault(const T &_v) { T old=v; v=_v; return old; }
117 template<typename T1>
119 typedef StdMap<Key,T1,Compare> other;
124 #endif // HUGO_MAPS_H