#[derive(Debug, Clone, Copy)]
pub(super) struct Node {
pub(super) prev: usize,
pub(super) next: usize,
pub(super) start: usize,
pub(super) len: usize,
}
impl Node {
pub(super) const PLACEHOLDER: Self = Self {
prev: 0,
next: 0,
start: 0,
len: 0,
};
}
#[derive(Debug, Clone, Copy)]
pub(super) struct Merge {
pub(super) left: usize,
pub(super) right: usize,
pub(super) rank: u32,
pub(super) len: usize,
}
impl PartialEq for Merge {
fn eq(&self, other: &Self) -> bool {
self.rank == other.rank && self.left == other.left
}
}
impl Eq for Merge {}
impl Ord for Merge {
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
other
.rank
.cmp(&self.rank)
.then_with(|| other.left.cmp(&self.left))
}
}
impl PartialOrd for Merge {
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
Some(self.cmp(other))
}
}