Path: blob/main/crates/polars-arrow/src/array/boolean/ffi.rs
6939 views
use polars_error::PolarsResult;12use super::BooleanArray;3use crate::array::{FromFfi, ToFfi};4use crate::bitmap::align;5use crate::ffi;67unsafe impl ToFfi for BooleanArray {8fn buffers(&self) -> Vec<Option<*const u8>> {9vec![10self.validity.as_ref().map(|x| x.as_ptr()),11Some(self.values.as_ptr()),12]13}1415fn offset(&self) -> Option<usize> {16let offset = self.values.offset();17if let Some(bitmap) = self.validity.as_ref() {18if bitmap.offset() == offset {19Some(offset)20} else {21None22}23} else {24Some(offset)25}26}2728fn to_ffi_aligned(&self) -> Self {29let offset = self.values.offset();3031let validity = self.validity.as_ref().map(|bitmap| {32if bitmap.offset() == offset {33bitmap.clone()34} else {35align(bitmap, offset)36}37});3839Self {40dtype: self.dtype.clone(),41validity,42values: self.values.clone(),43}44}45}4647impl<A: ffi::ArrowArrayRef> FromFfi<A> for BooleanArray {48unsafe fn try_from_ffi(array: A) -> PolarsResult<Self> {49let dtype = array.dtype().clone();50let validity = unsafe { array.validity() }?;51let values = unsafe { array.bitmap(1) }?;52Self::try_new(dtype, values, validity)53}54}555657