From 287eb34adf136e667700599ee0d91296e23a933c Mon Sep 17 00:00:00 2001 From: Ritchie Vink Date: Mon, 6 Sep 2021 14:58:07 +0200 Subject: [PATCH] process comments and apply them to 'extend_trusted_len' as well --- src/array/primitive/mutable.rs | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/array/primitive/mutable.rs b/src/array/primitive/mutable.rs index 0735347a86..d85e2e1de8 100644 --- a/src/array/primitive/mutable.rs +++ b/src/array/primitive/mutable.rs @@ -164,8 +164,8 @@ impl MutablePrimitiveArray { if let Some(validity) = self.validity.as_mut() { extend_trusted_len_unzip(iterator, validity, &mut self.values) } else { - let mut validity = - MutableBitmap::from_trusted_len_iter(std::iter::repeat(true).take(self.len())); + let mut validity = MutableBitmap::new(); + validity.extend_constant(self.len(), true); extend_trusted_len_unzip(iterator, &mut validity, &mut self.values); if validity.null_count() > 0 { self.validity = Some(validity); @@ -191,28 +191,25 @@ impl MutablePrimitiveArray { where I: Iterator, { - let size = iterator - .size_hint() - .1 - .expect("upper bound should be set by trusted len iter"); self.values.extend_from_trusted_len_iter_unchecked(iterator); - self.update_all_valid(size); + self.update_all_valid(); } #[inline] /// Extends the [`MutablePrimitiveArray`] from a slice pub fn extend_from_slice(&mut self, items: &[T]) { self.values.extend_from_slice(items); - self.update_all_valid(items.len()); + self.update_all_valid(); } - fn update_all_valid(&mut self, additional: usize) { + fn update_all_valid(&mut self) { + // get len before mutable borrow + let len = self.len(); if let Some(validity) = self.validity.as_mut() { - validity.extend_constant(additional, true); + validity.extend_constant(len - validity.len(), true); } else { - let validity = MutableBitmap::from_trusted_len_iter( - std::iter::repeat(true).take(self.len() + additional), - ); + let mut validity = MutableBitmap::new(); + validity.extend_constant(len, true); if validity.null_count() > 0 { self.validity = Some(validity); }