use crate::data::types::PhysicalType;
use crate::data::ArrayDataLayout;
use crate::{ArrayDataBuilder, Buffers};
use arrow_schema::DataType;
#[derive(Debug, Clone)]
pub struct NullArrayData {
data_type: DataType,
len: usize,
}
impl NullArrayData {
pub fn new(data_type: DataType, len: usize) -> Self {
assert_eq!(
PhysicalType::from(&data_type),
PhysicalType::Null,
"Illegal physical type for NullArrayData of datatype {data_type:?}",
);
Self { data_type, len }
}
pub unsafe fn new_unchecked(data_type: DataType, len: usize) -> Self {
Self { data_type, len }
}
pub(crate) unsafe fn from_raw(builder: ArrayDataBuilder) -> Self {
Self {
data_type: builder.data_type,
len: builder.len,
}
}
#[inline]
pub fn data_type(&self) -> &DataType {
&self.data_type
}
#[inline]
pub fn len(&self) -> usize {
self.len
}
pub fn into_parts(self) -> (DataType, usize) {
(self.data_type, self.len)
}
pub fn slice(&self, offset: usize, len: usize) -> Self {
let new_len = offset.saturating_add(len);
assert!(new_len <= self.len);
Self {
data_type: self.data_type.clone(),
len,
}
}
pub(crate) fn layout(&self) -> ArrayDataLayout<'_> {
ArrayDataLayout {
data_type: &self.data_type,
len: self.len,
offset: 0,
nulls: None,
buffers: Buffers::default(),
child_data: &[],
}
}
}