gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Fixes in the map concepts - Now Value type needn't be default constructible. - Extend the test file to check this.
0 2 0
default
2 files changed with 22 insertions and 9 deletions:
↑ Collapse diff ↑
Ignore white space 12 line context
... ...
@@ -44,16 +44,15 @@
44 44
      /// The key type of the map.
45 45
      typedef K Key;
46 46
      /// The value type of the map. (The type of objects associated with the keys).
47 47
      typedef T Value;
48 48

	
49 49
      /// Returns the value associated with the given key.
50

	
51
      /// Returns the value associated with the given key.
52
      /// \bug Value shouldn't need to be default constructible. 
53
      Value operator[](const Key &) const { return Value(); }
50
      Value operator[](const Key &) const { 
51
        return *static_cast<Value *>(0);
52
      }
54 53

	
55 54
      template<typename _ReadMap>
56 55
      struct Constraints {
57 56
	void constraints() {
58 57
	  Value val = m[key];
59 58
	  val = m[key];
... ...
@@ -123,13 +122,15 @@
123 122
      /// The key type of the map.
124 123
      typedef K Key;
125 124
      /// The value type of the map. (The type of objects associated with the keys).
126 125
      typedef T Value;
127 126

	
128 127
      /// Returns the value associated with the given key.
129
      Value operator[](const Key &) const { return Value(); }
128
      Value operator[](const Key &) const { 
129
        return *static_cast<Value *>(0);
130
      }
130 131

	
131 132
      /// Sets the value associated with the given key.
132 133
      void set(const Key &, const Value &) {}
133 134

	
134 135
      template<typename _ReadWriteMap>
135 136
      struct Constraints {
... ...
@@ -157,21 +158,23 @@
157 158
      typedef T Value;
158 159
      /// The reference type of the map.
159 160
      typedef R Reference;
160 161
      /// The const reference type of the map.
161 162
      typedef CR ConstReference;
162 163

	
163
    protected:
164
      Value tmp;
165 164
    public:
166 165

	
167 166
      /// Returns a reference to the value associated with the given key.
168
      Reference operator[](const Key &) { return tmp; }
167
      Reference operator[](const Key &) { 
168
        return *static_cast<Value *>(0);
169
      }
169 170

	
170 171
      /// Returns a const reference to the value associated with the given key.
171
      ConstReference operator[](const Key &) const { return tmp; }
172
      ConstReference operator[](const Key &) const {
173
        return *static_cast<Value *>(0);
174
      }
172 175

	
173 176
      /// Sets the value associated with the given key.
174 177
      void set(const Key &k,const Value &t) { operator[](k)=t; }
175 178

	
176 179
      template<typename _ReferenceMap>
177 180
      struct Constraints {
Ignore white space 6 line context
... ...
@@ -29,12 +29,18 @@
29 29
using namespace lemon::concepts;
30 30

	
31 31
struct A {};
32 32
inline bool operator<(A, A) { return true; }
33 33
struct B {};
34 34

	
35
class C {
36
  int x;
37
public:
38
  C(int _x) : x(_x) {}
39
};
40

	
35 41
class F {
36 42
public:
37 43
  typedef A argument_type;
38 44
  typedef B result_type;
39 45

	
40 46
  B operator()(const A&) const { return B(); }
... ...
@@ -55,15 +61,19 @@
55 61
typedef ReferenceMap<A, bool, bool&, const bool&> BoolRefMap;
56 62

	
57 63
int main()
58 64
{
59 65
  // Map concepts
60 66
  checkConcept<ReadMap<A,B>, ReadMap<A,B> >();
67
  checkConcept<ReadMap<A,C>, ReadMap<A,C> >();
61 68
  checkConcept<WriteMap<A,B>, WriteMap<A,B> >();
69
  checkConcept<WriteMap<A,C>, WriteMap<A,C> >();
62 70
  checkConcept<ReadWriteMap<A,B>, ReadWriteMap<A,B> >();
71
  checkConcept<ReadWriteMap<A,C>, ReadWriteMap<A,C> >();
63 72
  checkConcept<ReferenceMap<A,B,B&,const B&>, ReferenceMap<A,B,B&,const B&> >();
73
  checkConcept<ReferenceMap<A,C,C&,const C&>, ReferenceMap<A,C,C&,const C&> >();
64 74

	
65 75
  // NullMap
66 76
  {
67 77
    checkConcept<ReadWriteMap<A,B>, NullMap<A,B> >();
68 78
    NullMap<A,B> map1;
69 79
    NullMap<A,B> map2 = map1;
0 comments (0 inline)