vortex_array/arrays/bool/compute/
sum.rs1use std::ops::BitAnd;
2
3use vortex_error::VortexResult;
4use vortex_mask::AllOr;
5use vortex_scalar::Scalar;
6
7use crate::Array;
8use crate::arrays::{BoolArray, BoolEncoding};
9use crate::compute::SumFn;
10
11impl SumFn<&BoolArray> for BoolEncoding {
12 fn sum(&self, array: &BoolArray) -> VortexResult<Scalar> {
13 let true_count: Option<u64> = match array.validity_mask()?.boolean_buffer() {
14 AllOr::All => {
15 Some(array.boolean_buffer().count_set_bits() as u64)
17 }
18 AllOr::None => {
19 unreachable!("All-invalid boolean array should have been handled by entry-point")
21 }
22 AllOr::Some(validity_mask) => Some(
23 array
24 .boolean_buffer()
25 .bitand(validity_mask)
26 .count_set_bits() as u64,
27 ),
28 };
29 Ok(Scalar::from(true_count))
30 }
31}