Skip to content

Commit 10d5e30

Browse files
authored
Convert from to into (#2052)
1 parent b24b7b7 commit 10d5e30

File tree

1 file changed

+26
-44
lines changed

1 file changed

+26
-44
lines changed

encodings/runend/src/statistics.rs

Lines changed: 26 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use std::cmp;
22

33
use arrow_buffer::BooleanBuffer;
44
use itertools::Itertools;
5-
use vortex_array::array::PrimitiveArray;
65
use vortex_array::stats::{ArrayStatistics as _, Stat, StatisticsVTable, StatsSet};
76
use vortex_array::validity::{ArrayValidity as _, LogicalValidity};
87
use vortex_array::variants::PrimitiveArrayTrait;
@@ -46,27 +45,23 @@ impl RunEndArray {
4645
let ends = self.ends().into_primitive()?;
4746
let values = self.values().into_bool()?.boolean_buffer();
4847

49-
match_each_unsigned_integer_ptype!(ends.ptype(), |$P| self.typed_true_count::<$P>(ends, values))
48+
match_each_unsigned_integer_ptype!(ends.ptype(), |$P| self.typed_true_count(ends.as_slice::<$P>(), values))
5049
}
5150

52-
fn typed_true_count<P: NativePType>(
51+
fn typed_true_count<P: NativePType + Into<u64>>(
5352
&self,
54-
decompressed_ends: PrimitiveArray,
53+
decompressed_ends: &[P],
5554
decompressed_values: BooleanBuffer,
56-
) -> VortexResult<u64>
57-
where
58-
u64: From<P>,
59-
u64: From<bool>,
60-
{
55+
) -> VortexResult<u64> {
6156
Ok(match self.values().logical_validity() {
6257
LogicalValidity::AllValid(_) => {
6358
let mut begin = u64::try_from(self.offset()).vortex_expect("usize fits in u64");
6459
decompressed_ends
65-
.as_slice::<P>()
6660
.iter()
61+
.copied()
6762
.zip_eq(&decompressed_values)
6863
.map(|(end, bool_value)| {
69-
let end = u64::from(*end);
64+
let end: u64 = end.into();
7065
let len = end - begin;
7166
begin = end;
7267
len * u64::from(bool_value)
@@ -81,29 +76,23 @@ impl RunEndArray {
8176
None => self.len() as u64,
8277
Some(valid_index) => {
8378
let mut true_count: u64 = 0;
84-
let offsetted_begin = u64::try_from(self.offset())
85-
.ok()
86-
.vortex_expect("usize fits in u64");
87-
let offsetted_len = u64::try_from(self.len() + self.offset())
88-
.ok()
89-
.vortex_expect("usize fits in u64");
90-
let decompressed_ends = decompressed_ends.as_slice::<P>();
79+
let offsetted_begin = self.offset() as u64;
80+
let offsetted_len = (self.len() + self.offset()) as u64;
81+
let valid_end: u64 = decompressed_ends[valid_index].into();
9182
let begin = if valid_index == 0 {
9283
offsetted_begin
9384
} else {
94-
u64::from(decompressed_ends[valid_index - 1])
85+
valid_end
9586
};
9687

97-
let end =
98-
cmp::min(u64::from(decompressed_ends[valid_index]), offsetted_len);
99-
true_count +=
100-
u64::from(decompressed_values.value(valid_index)) * (end - begin);
88+
let end = cmp::min(valid_end, offsetted_len);
89+
true_count += decompressed_values.value(valid_index) as u64 * (end - begin);
10190

10291
for valid_index in is_valid {
103-
let end =
104-
cmp::min(u64::from(decompressed_ends[valid_index]), offsetted_len);
105-
true_count += u64::from(decompressed_values.value(valid_index))
106-
* (end - u64::from(decompressed_ends[valid_index - 1]));
92+
let valid_end: u64 = decompressed_ends[valid_index].into();
93+
let end = cmp::min(valid_end, offsetted_len);
94+
true_count +=
95+
decompressed_values.value(valid_index) as u64 * (end - valid_end);
10796
}
10897

10998
true_count
@@ -116,46 +105,39 @@ impl RunEndArray {
116105
fn null_count(&self) -> VortexResult<u64> {
117106
let ends = self.ends().into_primitive()?;
118107
let null_count = match self.values().logical_validity() {
119-
LogicalValidity::AllValid(_) => 0_u64,
108+
LogicalValidity::AllValid(_) => 0u64,
120109
LogicalValidity::AllInvalid(_) => self.len() as u64,
121110
LogicalValidity::Array(is_valid) => {
122111
let is_valid = is_valid.into_bool()?.boolean_buffer();
123-
match_each_unsigned_integer_ptype!(ends.ptype(), |$P| self.null_count_with_array_validity::<$P>(ends, is_valid))
112+
match_each_unsigned_integer_ptype!(ends.ptype(), |$P| self.null_count_with_array_validity(ends.as_slice::<$P>(), is_valid))
124113
}
125114
};
126115
Ok(null_count)
127116
}
128117

129-
fn null_count_with_array_validity<P: NativePType>(
118+
fn null_count_with_array_validity<P: NativePType + Into<u64>>(
130119
&self,
131-
decompressed_ends: PrimitiveArray,
120+
decompressed_ends: &[P],
132121
is_valid: BooleanBuffer,
133-
) -> u64
134-
where
135-
u64: From<P>,
136-
u64: TryFrom<usize>,
137-
{
122+
) -> u64 {
138123
let mut is_valid = is_valid.set_indices();
139124
match is_valid.next() {
140-
None => u64::try_from(self.len())
141-
.ok()
142-
.vortex_expect("usize fits in u64"),
125+
None => self.len() as u64,
143126
Some(valid_index) => {
144127
let offsetted_len = (self.len() + self.offset()) as u64;
145128
let mut null_count: u64 = self.len() as u64;
146-
let decompressed_ends = decompressed_ends.as_slice::<P>();
147129
let begin = if valid_index == 0 {
148130
0
149131
} else {
150-
u64::from(decompressed_ends[valid_index - 1])
132+
decompressed_ends[valid_index - 1].into()
151133
};
152134

153-
let end = cmp::min(u64::from(decompressed_ends[valid_index]), offsetted_len);
135+
let end = cmp::min(decompressed_ends[valid_index].into(), offsetted_len);
154136
null_count -= end - begin;
155137

156138
for valid_index in is_valid {
157-
let end = cmp::min(u64::from(decompressed_ends[valid_index]), offsetted_len);
158-
null_count -= end - u64::from(decompressed_ends[valid_index - 1]);
139+
let end = cmp::min(decompressed_ends[valid_index].into(), offsetted_len);
140+
null_count -= end - decompressed_ends[valid_index - 1].into();
159141
}
160142

161143
null_count

0 commit comments

Comments
 (0)