use crate::local_prelude::*;
#[allow(type_alias_bounds)]
type MatchWords<'a, B: BitBlock> =
Chain<Enumerate<Blocks<'a, B>>, Skip<Take<Enumerate<Repeat<B>>>>>;
pub(crate) fn blocks_for_bits<B: BitBlock>(bits: usize) -> usize {
if bits % B::bits() == 0 {
bits / B::bits()
} else {
bits / B::bits() + 1
}
}
#[allow(clippy::iter_skip_zero)]
pub(crate) fn match_words<'a, 'b, B: BitBlock>(
a: &'a BitVec<B>,
b: &'b BitVec<B>,
) -> (MatchWords<'a, B>, MatchWords<'b, B>) {
let a_len = a.storage().len();
let b_len = b.storage().len();
if a_len < b_len {
(
a.blocks()
.enumerate()
.chain(iter::repeat(B::zero()).enumerate().take(b_len).skip(a_len)),
b.blocks()
.enumerate()
.chain(iter::repeat(B::zero()).enumerate().take(0).skip(0)),
)
} else {
(
a.blocks()
.enumerate()
.chain(iter::repeat(B::zero()).enumerate().take(0).skip(0)),
b.blocks()
.enumerate()
.chain(iter::repeat(B::zero()).enumerate().take(a_len).skip(b_len)),
)
}
}