(
iterator: I,
)
| 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; |
nothing calls this directly
no test coverage detected