@@ -111,15 +111,16 @@ namespace jsoncons {
111111 std::memset (bloom, 0 , bloom_bytes);
112112 for (auto it = first; it != last; ++it)
113113 {
114- uint32_t h = a5hash32 ((*it).key ().data (), (*it).key ().size (), 0 );
114+ auto kv = make_key_value<KeyT,Json>()(*it);
115+ uint32_t h = a5hash32 (kv.key ().data (), kv.key ().size (), 0 );
115116 if (JSONCONS_LIKELY (!bloom_may_contain (bloom, h)))
116117 {
117- data_.emplace_back ((*it). key (), (*it). value ( ));
118+ data_.emplace_back (std::move (kv ));
118119 bloom_set (bloom, h);
119120 }
120121 else
121122 {
122- try_emplace ((*it) .key (), (*it) .value ());
123+ try_emplace (kv .key (), kv .value ());
123124 }
124125 }
125126
@@ -128,7 +129,8 @@ namespace jsoncons {
128129 {
129130 for (auto it = first; it != last; ++it)
130131 {
131- try_emplace ((*it).key (), (*it).value ());
132+ auto kv = make_key_value<KeyT,Json>()(*it);
133+ try_emplace (kv.key (), kv.value ());
132134 }
133135 }
134136 }
@@ -139,25 +141,26 @@ namespace jsoncons {
139141 : allocator_holder<allocator_type>(alloc),
140142 data_ (key_value_allocator_type(alloc))
141143 {
142- std::size_t size = std::distance (first,last);
143- if (size > 0 )
144+ std::size_t count = std::distance (first,last);
145+ if (count > 0 )
144146 {
145- data_.reserve (size );
146- if (size <= bloom_bytes)
147+ data_.reserve (count );
148+ if (count <= bloom_bytes)
147149 {
148150 std::uint8_t bloom[bloom_bytes];
149151 std::memset (bloom, 0 , bloom_bytes);
150152 for (auto it = first; it != last; ++it)
151153 {
152- uint32_t h = a5hash32 ((*it).key ().data (), (*it).key ().size (), 0 );
154+ auto kv = make_key_value<KeyT,Json>()(*it);
155+ uint32_t h = a5hash32 (kv.key ().data (), kv.key ().size (), 0 );
153156 if (JSONCONS_LIKELY (!bloom_may_contain (bloom, h)))
154157 {
155- data_.emplace_back ((*it). key (), (*it). value ( ));
158+ data_.emplace_back (std::move (kv ));
156159 bloom_set (bloom, h);
157160 }
158161 else
159162 {
160- try_emplace ((*it) .key (), (*it) .value ());
163+ try_emplace (kv .key (), kv .value ());
161164 }
162165 }
163166
@@ -166,7 +169,8 @@ namespace jsoncons {
166169 {
167170 for (auto it = first; it != last; ++it)
168171 {
169- try_emplace ((*it).key (), (*it).value ());
172+ auto kv = make_key_value<KeyT,Json>()(*it);
173+ try_emplace (kv.key (), kv.value ());
170174 }
171175 }
172176 }
@@ -408,23 +412,25 @@ namespace jsoncons {
408412 }
409413 for (auto it = first; it != last; ++it)
410414 {
411- uint32_t h = a5hash32 ((*it).first .data (), (*it).first .size (), 0 );
415+ auto kv = make_key_value<KeyT,Json>()(*it);
416+ uint32_t h = a5hash32 (kv.key ().data (), kv.key ().size (), 0 );
412417 if (JSONCONS_LIKELY (!bloom_may_contain (bloom, h)))
413- {
414- data_.emplace_back (key_type{(*it). first . c_str (), (*it). first . size (), get_allocator ()}, (*it). second );
418+ {
419+ data_.emplace_back (std::move (kv) );
415420 bloom_set (bloom, h);
416421 }
417422 else
418423 {
419- try_emplace (key_type{(*it). first . c_str (), (*it). first . size (), get_allocator ()}, (*it). second );
424+ try_emplace (kv. key (), kv. value () );
420425 }
421426 }
422427 }
423428 else
424429 {
425430 for (auto it = first; it != last; ++it)
426431 {
427- try_emplace (key_type{(*it).first .c_str (), (*it).first .size (), get_allocator ()}, (*it).second );
432+ auto kv = make_key_value<KeyT,Json>()(*it);
433+ try_emplace (kv.key (), kv.value ());
428434 }
429435 }
430436 }
0 commit comments