arrow_rayon/parallel_array/
parallel_float_array.rs

1use arrow_array::types::{Float16Type, Float32Type, Float64Type};
2use arrow_array::{Float16Array, Float32Array, Float64Array};
3use half::f16;
4use rayon::iter::ParallelIterator;
5
6use crate::parallel_primitive_array::{ParallelPrimitiveArray, ParallelPrimitiveArrayRef};
7
8pub type ParallelFloat16Array = ParallelPrimitiveArray<Float16Type>;
9pub type ParallelFloat16ArrayRef<'data> = ParallelPrimitiveArrayRef<'data, Float16Type>;
10pub type ParallelFloat32Array = ParallelPrimitiveArray<Float32Type>;
11pub type ParallelFloat32ArrayRef<'data> = ParallelPrimitiveArrayRef<'data, Float32Type>;
12pub type ParallelFloat64Array = ParallelPrimitiveArray<Float64Type>;
13pub type ParallelFloat64ArrayRef<'data> = ParallelPrimitiveArrayRef<'data, Float64Type>;
14
15pub trait Float16ArrayRefParallelIterator<'data> {
16    type Iter: ParallelIterator<Item = Option<f16>>;
17
18    fn par_iter(&'data self) -> Self::Iter;
19}
20
21impl<'data> Float16ArrayRefParallelIterator<'data> for Float16Array {
22    type Iter = ParallelFloat16ArrayRef<'data>;
23
24    fn par_iter(&'data self) -> Self::Iter {
25        ParallelFloat16ArrayRef::new(self)
26    }
27}
28
29pub trait Float32ArrayRefParallelIterator<'data> {
30    type Iter: ParallelIterator<Item = Option<f32>>;
31
32    fn par_iter(&'data self) -> Self::Iter;
33}
34
35impl<'data> Float32ArrayRefParallelIterator<'data> for Float32Array {
36    type Iter = ParallelFloat32ArrayRef<'data>;
37
38    fn par_iter(&'data self) -> Self::Iter {
39        ParallelFloat32ArrayRef::new(self)
40    }
41}
42
43pub trait Float64ArrayRefParallelIterator<'data> {
44    type Iter: ParallelIterator<Item = Option<f64>>;
45
46    fn par_iter(&'data self) -> Self::Iter;
47}
48
49impl<'data> Float64ArrayRefParallelIterator<'data> for Float64Array {
50    type Iter = ParallelFloat64ArrayRef<'data>;
51
52    fn par_iter(&'data self) -> Self::Iter {
53        ParallelFloat64ArrayRef::new(self)
54    }
55}