From ee189b5ecd5302bc422afdb86a28c2e1751e5a09 Mon Sep 17 00:00:00 2001 From: Konrad Borowski Date: Tue, 29 Aug 2017 23:51:13 +0200 Subject: [PATCH 1/2] Implement Extend<(&K, &V)> for Copy types --- src/lib.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 9521e74fe6..99130f9163 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1517,6 +1517,16 @@ impl Extend<(K, V)> for OrderMap } } +impl<'a, K, V, S> Extend<(&'a K, &'a V)> for OrderMap + where K: Hash + Eq + Copy, + V: Copy, + S: BuildHasher, +{ + fn extend>(&mut self, iterable: I) { + self.extend(iterable.into_iter().map(|(&key, &value)| (key, value))); + } +} + impl Default for OrderMap where S: BuildHasher + Default, { From 2db46a83b5c7cd0e19bae24b283dc9f7feb9858d Mon Sep 17 00:00:00 2001 From: Konrad Borowski Date: Wed, 30 Aug 2017 00:00:44 +0200 Subject: [PATCH 2/2] Test Extend<(&K, &V)> implementation --- src/lib.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 99130f9163..3b572aa144 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1765,4 +1765,12 @@ mod tests { assert_ne!(map_a, map_c); assert_ne!(map_c, map_a); } + + #[test] + fn extend() { + let mut map = OrderMap::new(); + map.extend(vec![(&1, &2), (&3, &4)]); + map.extend(vec![(5, 6)]); + assert_eq!(map.into_iter().collect::>(), vec![(1, 2), (3, 4), (5, 6)]); + } }