From e046315daa4392f175e197f7ef5cb5e290b63b15 Mon Sep 17 00:00:00 2001 From: Will Crichton Date: Mon, 2 Oct 2023 14:49:08 -0700 Subject: [PATCH] Implement Clone::clone_from for BitVec --- src/vec/tests/api.rs | 8 ++++++++ src/vec/traits.rs | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/src/vec/tests/api.rs b/src/vec/tests/api.rs index ffd58f56..16359fc6 100644 --- a/src/vec/tests/api.rs +++ b/src/vec/tests/api.rs @@ -67,4 +67,12 @@ fn misc() { let mut bv = bitvec![0, 0, 1, 1, 0, 0]; bv.extend_from_within(2 .. 4); assert_eq!(bv, bits![0, 0, 1, 1, 0, 0, 1, 1]); + + let mut bv = bitvec![0, 0, 1, 1]; + let bv2 = bitvec![1, 1, 0, 0]; + bv.clone_from(&bv2); + assert_eq!(bv, bv2); + let bv3 = bitvec![1, 0]; + bv.clone_from(&bv3); + assert_eq!(bv, bv3); } diff --git a/src/vec/traits.rs b/src/vec/traits.rs index ec935b0a..97a2e2c4 100644 --- a/src/vec/traits.rs +++ b/src/vec/traits.rs @@ -71,6 +71,15 @@ where fn clone(&self) -> Self { Self::from_bitslice(self.as_bitslice()) } + + #[inline] + fn clone_from(&mut self, other: &Self) { + if self.len() == other.len() { + self.copy_from_bitslice(other.as_bitslice()); + } else { + *self = other.clone(); + } + } } impl Eq for BitVec