2 #ifndef HUGO_MAPSKELETON_H
 
     3 #define HUGO_MAPSKELETON_H
 
     6 ///\brief Map concepts checking classes for testing and documenting.
 
    10   /// The namespace of HUGOlib concepts and concept checking classes
 
    13     /// Readable map concept
 
    14     template<typename K, typename T>
 
    20       /// Map's value type. (The type of objects associated with the keys).
 
    23       /// Returns the value associated with a key.
 
    24       ValueType operator[](const KeyType &k) const {return ValueType();}
 
    26       /// Copy contsructor. (optional)
 
    27       ReadableMap(const ReadableMap&) {}
 
    28       /// Assignment operator. (optional)
 
    29       ReadableMap& operator=(const ReadableMap&) {return *this;}
 
    35     /// Writable map concept
 
    36     template<typename K, typename T>
 
    42       /// Map's value type. (The type of objects associated with the keys).
 
    45       /// Sets the value associated with a key.
 
    46       void set(const KeyType &k,const ValueType &t) {}
 
    51     ///Read/Writeable map concept
 
    52     template<typename K, typename T>
 
    53     class ReadWritableMap : public ReadableMap<K,T>,
 
    54 			    public WritableMap<K,T>
 
    59       /// Map's value type. (The type of objects associated with the keys).
 
    62       /// Returns the value associated with a key.
 
    63       ValueType operator[](const KeyType &k) const {return ValueType();}
 
    64       /// Sets the value associated with a key.
 
    65       void set(const KeyType &k,const ValueType &t) {}
 
    67       /// Copy contsructor. (optional)
 
    68       ReadWritableMap(const ReadWritableMap&) {}
 
    69       /// Assignment operator. (optional)
 
    70       ReadWritableMap& operator=(const ReadWritableMap&) {return *this;}
 
    72       /// Facility to define a map with an other value type (optional)
 
    75 	/// The type of a map with the given value type
 
    76 	typedef ReadWritableMap<K,T1> other;
 
    78       /// @brief Constructor that copies all keys from the other map and
 
    79       /// assigns to them a default value (optional)
 
    81       ReadWritableMap(const ReadWritableMap<K,T1> &map, const ValueType &v) {}
 
    87     ///Dereferable map concept
 
    88     template<typename K, typename T>
 
    89     class DereferableMap : public ReadWritableMap<K,T>
 
    94       /// Map's value type. (The type of objects associated with the keys).
 
    96       /// Map's reference type. (Reference to an object associated with a key)
 
    97       typedef ValueType& ReferenceType;
 
    98       /// Map's const reference type.
 
    99       typedef const ValueType& ConstReferenceType;
 
   101       ///Returns a reference to the value associated to a key.
 
   102       ReferenceType operator[](const KeyType &i);
 
   103       ///Returns a const reference to the value associated to a key.
 
   104       ConstReferenceType operator[](const KeyType &i) const;
 
   105       /// Sets the value associated with a key.
 
   106       void set(const KeyType &k,const ValueType &t) { operator[](k)=t; }
 
   108       /// Copy contsructor. (optional)
 
   109       DereferableMap(const DereferableMap&) {}
 
   110       /// Assignment operator. (optional)
 
   111       DereferableMap& operator=(const DereferableMap&) {return *this;}
 
   113       /// Facility to define a map with an other value type (optional)
 
   114       template<typename T1>
 
   116 	/// The type of a map with the given value type
 
   117 	typedef DereferableMap<K,T1> other;
 
   119       /// @brief Constructor that copies all keys from the other map and
 
   120       /// assigns to them a default value (optional)
 
   121       template<typename T1>
 
   122       DereferableMap(const DereferableMap<K,T1> &map, const ValueType &v) {}
 
   130 #endif // HUGO_MAPSKELETON_H