arrow_data/transform/
primitive.rs1use crate::ArrayData;
19use arrow_buffer::ArrowNativeType;
20use std::mem::size_of;
21use std::ops::Add;
22
23use super::{_MutableArrayData, Extend};
24
25pub(super) fn build_extend<T: ArrowNativeType>(array: &ArrayData) -> Extend<'_> {
26 let values = array.buffer::<T>(0);
27 Box::new(
28 move |mutable: &mut _MutableArrayData, _, start: usize, len: usize| {
29 mutable
30 .buffer1
31 .extend_from_slice(&values[start..start + len]);
32 Ok(())
33 },
34 )
35}
36
37pub(super) fn build_extend_with_offset<T>(array: &ArrayData, offset: T) -> Extend<'_>
38where
39 T: ArrowNativeType + Add<Output = T>,
40{
41 let values = array.buffer::<T>(0);
42 Box::new(
43 move |mutable: &mut _MutableArrayData, _, start: usize, len: usize| {
44 mutable
45 .buffer1
46 .extend(values[start..start + len].iter().map(|x| *x + offset));
47 Ok(())
48 },
49 )
50}
51
52pub(super) fn extend_nulls<T: ArrowNativeType>(
53 mutable: &mut _MutableArrayData,
54 len: usize,
55) -> Result<(), arrow_schema::ArrowError> {
56 mutable.buffer1.extend_zeros(len * size_of::<T>());
57 Ok(())
58}