Started.
     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) { 
 
    99     ReferenceType operator[](const Key &k) {
 
   100       return insert(PairType(k,v)).first -> second;
 
   102     ConstReferenceType operator[](const Key &k) const {
 
   103       typename parent::iterator i = lower_bound(k);
 
   104       if (i == parent::end() || parent::key_comp()(k, (*i).first))
 
   108     void set(const Key &k, const T &t) {
 
   109       parent::operator[](k) = t;
 
   112     /// Changes the default value of the map.
 
   113     /// \return Returns the previous default value.
 
   115     /// \warning The value of some keys (which has alredy been queried, but
 
   116     /// the value has been unchanged from the default) may change!
 
   117     T setDefault(const T &_v) { T old=v; v=_v; return old; }
 
   119     template<typename T1>
 
   121       typedef StdMap<Key,T1,Compare> other;
 
   126 #endif // HUGO_MAPS_H