Dandandan commented on code in PR #8951:
URL: https://github.com/apache/arrow-rs/pull/8951#discussion_r2618331428
##########
arrow-buffer/src/builder/null.rs:
##########
@@ -193,6 +193,85 @@ impl NullBufferBuilder {
}
}
+ /// Extends this builder with validity values.
+ ///
+ ///
+ /// # Example
+ /// ```
+ /// # use arrow_buffer::NullBufferBuilder;
+ /// let mut builder = NullBufferBuilder::new(8);
+ /// let validities = [true, false, true, true];
+ /// builder.extend(validities.iter().copied());
+ /// assert_eq!(builder.len(), 4);
+ /// ```
+ pub fn extend<I: Iterator<Item = bool>>(&mut self, iter: I) {
+ let (lower, upper) = iter.size_hint();
+ let len = upper.expect("Iterator must have exact size_hint");
+ debug_assert_eq!(lower, len, "Iterator must have exact size_hint");
+
+ if len == 0 {
+ return;
+ }
+
+ // Materialize since we're about to append bits
+ self.materialize_if_needed();
+
+ let buf = self.bitmap_builder.as_mut().unwrap();
+ let start_len = buf.len();
+ // Advance to allocate space, initializing new bits to 0
+ buf.advance(len);
+
+ let slice = buf.as_slice_mut();
+ let mut bit_idx = start_len;
+ let end_bit = start_len + len;
+
+ // Process in chunks of 64 bits when byte-aligned for better
performance
Review Comment:
I think this is the same comment as @alamb has?
Yeah perhaps this can improve performance (will see guided by benchmarks).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]