MCPcopy Create free account
hub / github.com/apache/arrow-rs / from_trusted_len_iter

Method from_trusted_len_iter

arrow-buffer/src/buffer/mutable.rs:958–982  ·  view source on GitHub ↗
(
        iterator: I,
    )

Source from the content-addressed store, hash-verified

956 // 2. `from_trusted_len_iter` is faster.
957 #[inline]
958 pub unsafe fn from_trusted_len_iter<T: ArrowNativeType, I: Iterator<Item = T>>(
959 iterator: I,
960 ) -> Self {
961 let item_size = std::mem::size_of::<T>();
962 let (_, upper) = iterator.size_hint();
963 let upper = upper.expect("from_trusted_len_iter requires an upper limit");
964 let len = upper * item_size;
965
966 let mut buffer = MutableBuffer::new(len);
967
968 let mut dst = buffer.data.as_ptr();
969 for item in iterator {
970 // note how there is no reserve here (compared with `extend_from_iter`)
971 let src = item.to_byte_slice().as_ptr();
972 unsafe { std::ptr::copy_nonoverlapping(src, dst, item_size) };
973 dst = unsafe { dst.add(item_size) };
974 }
975 assert_eq!(
976 unsafe { dst.offset_from(buffer.data.as_ptr()) } as usize,
977 len,
978 "Trusted iterator length was not accurately reported"
979 );
980 buffer.len = len;
981 buffer
982 }
983
984 /// Creates a [`MutableBuffer`] from a boolean [`Iterator`] with a trusted (upper) length.
985 /// # use arrow_buffer::buffer::MutableBuffer;

Callers

nothing calls this directly

Calls 4

to_byte_sliceMethod · 0.80
size_hintMethod · 0.45
as_ptrMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected