[PATCH] D10669: Part 1 of N4279 - "Improved insertion interface for unique-key maps"

Eric Fiselier eric at efcs.ca
Mon Jul 6 13:47:55 PDT 2015


EricWF accepted this revision.

This revision is now accepted and ready to land.

LGTM modulo inline comments.


================
Comment at: include/map:1138
@@ +1137,3 @@
+        else
+            return emplace_hint(__p, 
+                      _VSTD::piecewise_construct, _VSTD::forward_as_tuple(__k), 
----------------
mclow.lists wrote:
> I think this should be `__h`, not `__p`, since `__p == end()`
I actually think you should leave this as is. `__tree` seems to properly handle the end iterator as a hint. `__tree::__find_equal(hint, ...)` assumes that if `hint` is `end()` then the value should be inserted just prior to `hint`. 

You should be able to implement the the `try_emplace(hint, ...)` methods in terms of the normal `try_emplace` methods because we ignore the hint anyway.





================
Comment at: test/std/containers/associative/map/map.modifiers/try.emplace.pass.cpp:70
@@ +69,3 @@
+        for ( int i = 0; i < 20; i += 2 )
+            m.emplace ( i, Moveable(i, (double) i));
+        assert(m.size() == 10);
----------------
Why not use `try_emplace` here as well? 

================
Comment at: test/std/containers/associative/map/map.modifiers/try.emplace.pass.cpp:73
@@ +72,3 @@
+
+        Moveable mv1(3, 3.0);
+        r = m.try_emplace(2, std::move(mv1));
----------------
For the sake of covering corner cases could we test every inserted value? This applies for `insert_or_assign` as well.

```
for (int i=0; i < 20; i += 2) {
  Movable mv1(i, (double)i);
  r = m.try_emplace(2, std::move(mv1));
  assert(m.size() == 10);
  assert(!r.second);                  // was not inserted
  assert(!mv1.moved());               // was not moved from
  assert(r.first->first == 2);        // key
}
```

================
Comment at: test/std/containers/associative/map/map.modifiers/try.emplace.pass.cpp:80
@@ +79,3 @@
+
+        r = m.try_emplace(3, std::move(mv1));
+        assert(m.size() == 11);
----------------
We should test the cases where insertion happens at the front and at the back.


http://reviews.llvm.org/D10669







More information about the cfe-commits mailing list