diff options
| author | bors <bors@rust-lang.org> | 2018-07-02 08:28:12 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-07-02 08:28:12 +0000 |
| commit | a96c88e80fce9d1950aa4700bdeacee35cb9ac02 (patch) | |
| tree | 1c8472b7b9377b516bba8703f7dd869b42d10cb5 /src/liballoc | |
| parent | a53bd20fae43cb35d394d7823aacdf52ccbd19cb (diff) | |
| parent | f46f05bae8d81246f1ad93ccee051a13c9be393e (diff) | |
| download | rust-a96c88e80fce9d1950aa4700bdeacee35cb9ac02.tar.gz rust-a96c88e80fce9d1950aa4700bdeacee35cb9ac02.zip | |
Auto merge of #51893 - nnethercote:BTreeMap-clone-noalloc, r=nnethercote
Make `BTreeMap::clone()` not allocate when cloning an empty tree. r? @Gankro CC @porglezomp
Diffstat (limited to 'src/liballoc')
| -rw-r--r-- | src/liballoc/collections/btree/map.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/liballoc/collections/btree/map.rs b/src/liballoc/collections/btree/map.rs index e6e454446e2..2aad3149bb2 100644 --- a/src/liballoc/collections/btree/map.rs +++ b/src/liballoc/collections/btree/map.rs @@ -213,7 +213,16 @@ impl<K: Clone, V: Clone> Clone for BTreeMap<K, V> { } } - clone_subtree(self.root.as_ref()) + if self.len() == 0 { + // Ideally we'd call `BTreeMap::new` here, but that has the `K: + // Ord` constraint, which this method lacks. + BTreeMap { + root: node::Root::shared_empty_root(), + length: 0, + } + } else { + clone_subtree(self.root.as_ref()) + } } } |
