Skip to content

Commit 78700b4

Browse files
committed
Revert "Use ExactSizeIterator in BooleanArray::from_trusted_len_iter"
This reverts commit 36a2fac.
1 parent 4ef2ef2 commit 78700b4

File tree

3 files changed

+8
-7
lines changed

3 files changed

+8
-7
lines changed

arrow-array/src/array/boolean_array.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -497,8 +497,7 @@ impl BooleanArray {
497497
/// # Safety
498498
///
499499
/// The iterator must be [`TrustedLen`](https://doc.rust-lang.org/std/iter/trait.TrustedLen.html).
500-
/// I.e. that `size_hint().1` correctly reports its length. Note that this is a stronger
501-
/// guarantee that `ExactSizeIterator` provides which could still report a wrong length.
500+
/// I.e. that `size_hint().1` correctly reports its length.
502501
///
503502
/// # Panics
504503
///
@@ -511,9 +510,11 @@ impl BooleanArray {
511510
pub unsafe fn from_trusted_len_iter<I, P>(iter: I) -> Self
512511
where
513512
P: Into<BooleanAdapter>,
514-
I: ExactSizeIterator<Item = P>,
513+
I: IntoIterator<Item = P>,
515514
{
516-
let data_len = iter.len();
515+
let iter = iter.into_iter();
516+
let (_, data_len) = iter.size_hint();
517+
let data_len = data_len.expect("Iterator must be sized");
517518

518519
let num_bytes = bit_util::ceil(data_len, 8);
519520
let mut null_builder = MutableBuffer::from_len_zeroed(num_bytes);
@@ -715,7 +716,7 @@ mod tests {
715716
let expected = v.clone().into_iter().collect::<BooleanArray>();
716717
let actual = unsafe {
717718
// SAFETY: `v` has trusted length
718-
BooleanArray::from_trusted_len_iter(v.into_iter())
719+
BooleanArray::from_trusted_len_iter(v)
719720
};
720721
assert_eq!(expected, actual);
721722
}

arrow-array/src/builder/boolean_builder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ impl Extend<Option<bool>> for BooleanBuilder {
237237
let buffered = iter.into_iter().collect::<Vec<_>>();
238238
let array = unsafe {
239239
// SAFETY: buffered.into_iter() is a trusted length iterator
240-
BooleanArray::from_trusted_len_iter(buffered.into_iter())
240+
BooleanArray::from_trusted_len_iter(buffered)
241241
};
242242
self.append_array(&array)
243243
}

arrow/benches/array_from.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ fn array_from_vec_benchmark(c: &mut Criterion) {
209209
fn gen_option_iter<TItem: Clone + 'static>(
210210
item: TItem,
211211
len: usize,
212-
) -> Box<dyn ExactSizeIterator<Item = Option<TItem>>> {
212+
) -> Box<dyn Iterator<Item = Option<TItem>>> {
213213
hint::black_box(Box::new(repeat_n(item, len).enumerate().map(
214214
|(idx, item)| {
215215
if idx % 3 == 0 {

0 commit comments

Comments
 (0)