use crate::data::ArrayData;
use super::equal_range;
pub(super) fn run_equal(
lhs: &ArrayData,
rhs: &ArrayData,
lhs_start: usize,
rhs_start: usize,
len: usize,
) -> bool {
if lhs_start != 0
|| rhs_start != 0
|| (lhs.len() != len && rhs.len() != len)
|| lhs.offset() > 0
|| rhs.offset() > 0
{
unimplemented!("Logical comparison for run array not supported.")
}
if lhs.len() != rhs.len() {
return false;
}
let lhs_run_ends_array = lhs.child_data().get(0).unwrap();
let lhs_values_array = lhs.child_data().get(1).unwrap();
let rhs_run_ends_array = rhs.child_data().get(0).unwrap();
let rhs_values_array = rhs.child_data().get(1).unwrap();
if lhs_run_ends_array.len() != rhs_run_ends_array.len() {
return false;
}
if lhs_values_array.len() != rhs_values_array.len() {
return false;
}
let run_ends_equal = equal_range(
lhs_run_ends_array,
rhs_run_ends_array,
lhs_start,
rhs_start,
lhs_run_ends_array.len(),
);
if !run_ends_equal {
return false;
}
equal_range(
lhs_values_array,
rhs_values_array,
lhs_start,
rhs_start,
rhs_values_array.len(),
)
}