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