arrow_rayon/parallel_array/
parallel_decimal_array.rs

1use arrow_array::types::{Decimal128Type, Decimal256Type};
2use arrow_array::{Decimal128Array, Decimal256Array};
3use arrow_buffer::i256;
4use rayon::iter::ParallelIterator;
5
6use crate::parallel_primitive_array::{ParallelPrimitiveArray, ParallelPrimitiveArrayRef};
7
8pub type ParallelDecimal128Array = ParallelPrimitiveArray<Decimal128Type>;
9pub type ParallelDecimal128ArrayRef<'data> = ParallelPrimitiveArrayRef<'data, Decimal128Type>;
10pub type ParallelDecimal256Array = ParallelPrimitiveArray<Decimal256Type>;
11pub type ParallelDecimal256ArrayRef<'data> = ParallelPrimitiveArrayRef<'data, Decimal256Type>;
12
13pub trait Decimal128ArrayRefParallelIterator<'data> {
14    type Iter: ParallelIterator<Item = Option<i128>>;
15
16    fn par_iter(&'data self) -> Self::Iter;
17}
18
19impl<'data> Decimal128ArrayRefParallelIterator<'data> for Decimal128Array {
20    type Iter = ParallelDecimal128ArrayRef<'data>;
21
22    fn par_iter(&'data self) -> Self::Iter {
23        ParallelDecimal128ArrayRef::new(self)
24    }
25}
26
27pub trait Decimal256ArrayRefParallelIterator<'data> {
28    type Iter: ParallelIterator<Item = Option<i256>>;
29
30    fn par_iter(&'data self) -> Self::Iter;
31}
32
33impl<'data> Decimal256ArrayRefParallelIterator<'data> for Decimal256Array {
34    type Iter = ParallelDecimal256ArrayRef<'data>;
35
36    fn par_iter(&'data self) -> Self::Iter {
37        ParallelDecimal256ArrayRef::new(self)
38    }
39}