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

Method from_iter_values

arrow-array/src/array/byte_array.rs:217–248  ·  view source on GitHub ↗

Creates a [`GenericByteArray`] based on an iterator of values without nulls

(iter: I)

Source from the content-addressed store, hash-verified

215
216 /// Creates a [`GenericByteArray`] based on an iterator of values without nulls
217 pub fn from_iter_values<Ptr, I>(iter: I) -> Self
218 where
219 Ptr: AsRef<T::Native>,
220 I: IntoIterator<Item = Ptr>,
221 {
222 let iter = iter.into_iter();
223 let (_, data_len) = iter.size_hint();
224 let data_len = data_len.expect("Iterator must be sized"); // panic if no upper bound.
225
226 let mut offsets = MutableBuffer::new((data_len + 1) * std::mem::size_of::<T::Offset>());
227 offsets.push(T::Offset::usize_as(0));
228
229 let mut values = MutableBuffer::new(0);
230 for s in iter {
231 let s: &[u8] = s.as_ref().as_ref();
232 values.extend_from_slice(s);
233 offsets.push(T::Offset::usize_as(values.len()));
234 }
235
236 T::Offset::from_usize(values.len()).expect("offset overflow");
237 let offsets = Buffer::from(offsets);
238
239 // Safety: valid by construction
240 let value_offsets = unsafe { OffsetBuffer::new_unchecked(offsets.into()) };
241
242 Self {
243 data_type: T::DATA_TYPE,
244 value_data: values.into(),
245 value_offsets,
246 nulls: None,
247 }
248 }
249
250 /// Deconstruct this array into its constituent parts
251 pub fn into_parts(self) -> (OffsetBuffer<T::Offset>, Buffer, Option<NullBuffer>) {

Callers

nothing calls this directly

Calls 6

extend_from_sliceMethod · 0.80
into_iterMethod · 0.45
size_hintMethod · 0.45
pushMethod · 0.45
as_refMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected