@@ -69,6 +69,13 @@ namespace glz
69
69
std::shared_ptr<std::shared_lock<std::shared_mutex>> shared_lock_ptr;
70
70
std::shared_ptr<std::unique_lock<std::shared_mutex>> unique_lock_ptr;
71
71
72
+ struct proxy
73
+ {
74
+ std::pair<const K&, V&> p;
75
+
76
+ std::pair<const K&, V&>* operator ->() { return &p; }
77
+ };
78
+
72
79
public:
73
80
iterator (typename std::vector<K>::const_iterator key_it, typename std::vector<V>::iterator value_it,
74
81
async_map* map, std::shared_ptr<std::shared_lock<std::shared_mutex>> existing_shared_lock = nullptr ,
@@ -132,11 +139,9 @@ namespace glz
132
139
return tmp;
133
140
}
134
141
135
- // Dereference
136
142
value_type operator *() const { return {*key_it, *value_it}; }
137
143
138
- // Arrow Operator
139
- std::unique_ptr<value_type> operator ->() const { return std::make_unique<value_type>(*key_it, *value_it); }
144
+ proxy operator ->() const { return proxy (*key_it, *value_it); }
140
145
141
146
// Equality Comparison
142
147
bool operator ==(const iterator& other) const { return key_it == other.key_it ; }
@@ -145,7 +150,6 @@ namespace glz
145
150
bool operator !=(const iterator& other) const { return !(*this == other); }
146
151
};
147
152
148
- // Const Iterator Class Definition
149
153
class const_iterator
150
154
{
151
155
public:
@@ -161,6 +165,13 @@ namespace glz
161
165
const async_map* map;
162
166
std::shared_ptr<std::shared_lock<std::shared_mutex>> shared_lock_ptr;
163
167
168
+ struct proxy
169
+ {
170
+ std::pair<const K&, const V&> p;
171
+
172
+ const std::pair<const K&, const V&>* operator ->() const { return &p; }
173
+ };
174
+
164
175
public:
165
176
const_iterator (typename std::vector<K>::const_iterator key_it,
166
177
typename std::vector<V>::const_iterator value_it, const async_map* map,
@@ -214,11 +225,9 @@ namespace glz
214
225
return tmp;
215
226
}
216
227
217
- // Dereference
218
228
value_type operator *() const { return {*key_it, *value_it}; }
219
229
220
- // Arrow Operator
221
- std::unique_ptr<value_type> operator ->() const { return std::make_unique<value_type>(*key_it, *value_it); }
230
+ proxy operator ->() const { return proxy (*key_it, *value_it); }
222
231
223
232
// Equality Comparison
224
233
bool operator ==(const const_iterator& other) const { return key_it == other.key_it ; }
0 commit comments