use super::{Extend, _MutableArrayData};
use crate::ArrayData;
use arrow_schema::DataType;
pub(super) fn build_extend(array: &ArrayData) -> Extend {
let size = match array.data_type() {
DataType::FixedSizeBinary(i) => *i as usize,
_ => unreachable!(),
};
let values = &array.buffers()[0].as_slice()[array.offset() * size..];
Box::new(
move |mutable: &mut _MutableArrayData, _, start: usize, len: usize| {
let buffer = &mut mutable.buffer1;
buffer.extend_from_slice(&values[start * size..(start + len) * size]);
},
)
}
pub(super) fn extend_nulls(mutable: &mut _MutableArrayData, len: usize) {
let size = match mutable.data_type {
DataType::FixedSizeBinary(i) => i as usize,
_ => unreachable!(),
};
let values_buffer = &mut mutable.buffer1;
values_buffer.extend_zeros(len * size);
}