Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-arrow/src/legacy/array/default_arrays.rs
6939 views
1
use crate::array::{BinaryArray, BooleanArray, PrimitiveArray, Utf8Array};
2
use crate::bitmap::Bitmap;
3
use crate::buffer::Buffer;
4
use crate::datatypes::ArrowDataType;
5
use crate::offset::OffsetsBuffer;
6
use crate::types::NativeType;
7
8
pub trait FromData<T> {
9
fn from_data_default(values: T, validity: Option<Bitmap>) -> Self;
10
}
11
12
impl FromData<Bitmap> for BooleanArray {
13
fn from_data_default(values: Bitmap, validity: Option<Bitmap>) -> BooleanArray {
14
BooleanArray::new(ArrowDataType::Boolean, values, validity)
15
}
16
}
17
18
impl<T: NativeType> FromData<Buffer<T>> for PrimitiveArray<T> {
19
fn from_data_default(values: Buffer<T>, validity: Option<Bitmap>) -> Self {
20
let dt = T::PRIMITIVE;
21
PrimitiveArray::new(dt.into(), values, validity)
22
}
23
}
24
25
pub trait FromDataUtf8 {
26
/// # Safety
27
/// `values` buffer must contain valid utf8 between every `offset`
28
unsafe fn from_data_unchecked_default(
29
offsets: Buffer<i64>,
30
values: Buffer<u8>,
31
validity: Option<Bitmap>,
32
) -> Self;
33
}
34
35
impl FromDataUtf8 for Utf8Array<i64> {
36
unsafe fn from_data_unchecked_default(
37
offsets: Buffer<i64>,
38
values: Buffer<u8>,
39
validity: Option<Bitmap>,
40
) -> Self {
41
let offsets = OffsetsBuffer::new_unchecked(offsets);
42
Utf8Array::new_unchecked(ArrowDataType::LargeUtf8, offsets, values, validity)
43
}
44
}
45
46
pub trait FromDataBinary {
47
/// # Safety
48
/// `values` buffer must contain valid utf8 between every `offset`
49
unsafe fn from_data_unchecked_default(
50
offsets: Buffer<i64>,
51
values: Buffer<u8>,
52
validity: Option<Bitmap>,
53
) -> Self;
54
}
55
56
impl FromDataBinary for BinaryArray<i64> {
57
unsafe fn from_data_unchecked_default(
58
offsets: Buffer<i64>,
59
values: Buffer<u8>,
60
validity: Option<Bitmap>,
61
) -> Self {
62
let offsets = OffsetsBuffer::new_unchecked(offsets);
63
BinaryArray::new(ArrowDataType::LargeBinary, offsets, values, validity)
64
}
65
}
66
67