polars_arrow/legacy/kernels/take_agg/
boolean.rs1#![allow(unsafe_op_in_unsafe_fn)]
2use super::*;
3
4#[inline]
8pub unsafe fn take_min_bool_iter_unchecked_nulls<I: IntoIterator<Item = usize>>(
9 arr: &BooleanArray,
10 indices: I,
11 len: IdxSize,
12) -> Option<bool> {
13 let mut null_count = 0 as IdxSize;
14 let validity = arr.validity().unwrap();
15
16 for idx in indices {
17 if validity.get_bit_unchecked(idx) {
18 if !arr.value_unchecked(idx) {
19 return Some(false);
20 }
21 } else {
22 null_count += 1;
23 }
24 }
25 if null_count == len { None } else { Some(true) }
26}
27
28#[inline]
32pub unsafe fn take_min_bool_iter_unchecked_no_nulls<I: IntoIterator<Item = usize>>(
33 arr: &BooleanArray,
34 indices: I,
35) -> Option<bool> {
36 if arr.is_empty() {
37 return None;
38 }
39
40 for idx in indices {
41 if !arr.value_unchecked(idx) {
42 return Some(false);
43 }
44 }
45 Some(true)
46}
47
48#[inline]
52pub unsafe fn take_max_bool_iter_unchecked_nulls<I: IntoIterator<Item = usize>>(
53 arr: &BooleanArray,
54 indices: I,
55 len: IdxSize,
56) -> Option<bool> {
57 let mut null_count = 0 as IdxSize;
58 let validity = arr.validity().unwrap();
59
60 for idx in indices {
61 if validity.get_bit_unchecked(idx) {
62 if arr.value_unchecked(idx) {
63 return Some(true);
64 }
65 } else {
66 null_count += 1;
67 }
68 }
69 if null_count == len { None } else { Some(false) }
70}
71
72#[inline]
76pub unsafe fn take_max_bool_iter_unchecked_no_nulls<I: IntoIterator<Item = usize>>(
77 arr: &BooleanArray,
78 indices: I,
79) -> Option<bool> {
80 if arr.is_empty() {
81 return None;
82 }
83
84 for idx in indices {
85 if arr.value_unchecked(idx) {
86 return Some(true);
87 }
88 }
89 Some(false)
90}