Improved support for move-only types in `hashmap`. While it was already possible to create a `hashmap` over move-only values, we still performed a copy in `put`, making it hard to dynamically add elements with the expected stout semantics.
This patch relaxes the requirements on the value argument to `put` so that instead of copyable we now only require move-constructible types. Review: https://reviews.apache.org/r/66608/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/b95d68d6 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/b95d68d6 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/b95d68d6 Branch: refs/heads/master Commit: b95d68d632caef49c9bba9e57493d2d853df0a87 Parents: ac6b383 Author: Benjamin Bannier <[email protected]> Authored: Tue Apr 24 20:02:09 2018 +0200 Committer: Benjamin Bannier <[email protected]> Committed: Tue Apr 24 20:02:09 2018 +0200 ---------------------------------------------------------------------- 3rdparty/stout/include/stout/hashmap.hpp | 9 +++++++++ 1 file changed, 9 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/b95d68d6/3rdparty/stout/include/stout/hashmap.hpp ---------------------------------------------------------------------- diff --git a/3rdparty/stout/include/stout/hashmap.hpp b/3rdparty/stout/include/stout/hashmap.hpp index 91085b8..698fa0f 100644 --- a/3rdparty/stout/include/stout/hashmap.hpp +++ b/3rdparty/stout/include/stout/hashmap.hpp @@ -101,6 +101,15 @@ public: // Inserts a key, value pair into the map replacing an old value // if the key is already present. + void put(const Key& key, Value&& value) + { + std::unordered_map<Key, Value, Hash, Equal>::erase(key); + std::unordered_map<Key, Value, Hash, Equal>::insert( + std::pair<Key, Value>(key, std::move(value))); + } + + // Inserts a key, value pair into the map replacing an old value + // if the key is already present. void put(const Key& key, const Value& value) { std::unordered_map<Key, Value, Hash, Equal>::erase(key);
