pub struct SizeHintExtendingIter<TInner> {
inner: TInner,
extend_size_by: usize,
}
impl<TInner> SizeHintExtendingIter<TInner> {
pub fn new(inner: TInner, extend_size_by: usize) -> Self {
Self {
inner,
extend_size_by,
}
}
}
impl<TInner> Iterator for SizeHintExtendingIter<TInner>
where
TInner: Iterator,
{
type Item = TInner::Item;
#[inline]
fn next(&mut self) -> Option<Self::Item> {
self.inner.next()
}
#[inline]
fn size_hint(&self) -> (usize, Option<usize>) {
let (lower, upper) = self.inner.size_hint();
let upper = upper.map(|upper| upper.saturating_add(self.extend_size_by));
let lower = lower.saturating_add(self.extend_size_by);
(lower, upper)
}
}
impl<TInner> ExactSizeIterator for SizeHintExtendingIter<TInner>
where
TInner: ExactSizeIterator,
{
#[inline]
fn len(&self) -> usize {
self.inner.len()
}
}