arrow_rayon/parallel_array/
parallel_decimal_array.rs1use 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}