Skip to content

Commit

Permalink
More Lend
Browse files Browse the repository at this point in the history
  • Loading branch information
vigna committed Nov 2, 2023
1 parent b507474 commit a48458c
Showing 1 changed file with 12 additions and 20 deletions.
32 changes: 12 additions & 20 deletions src/sources/from_iter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ impl<'lend, I: Iterator> Lending<'lend> for FromIter<I> {

impl<I: Iterator> Lender for FromIter<I> {
#[inline]
fn next(&mut self) -> Option<<Self as Lending<'_>>::Lend> {
fn next(&mut self) -> Option<Lend<'_, Self>> {
self.iter.next()
}
#[inline]
Expand All @@ -59,7 +59,7 @@ impl<I: Iterator> Lender for FromIter<I> {
}

impl<I: DoubleEndedIterator> DoubleEndedLender for FromIter<I> {
fn next_back(&mut self) -> Option<<Self as Lending<'_>>::Lend> {
fn next_back(&mut self) -> Option<Lend<'_, Self>> {
self.iter.next_back()
}
}
Expand Down Expand Up @@ -140,7 +140,7 @@ impl<I: IntoIterator> From<I> for FromIntoIter<I> {
pub fn lend_iter<'a, L, I>(iter: I) -> LendIter<'a, L, I>
where
L: ?Sized + for<'all> Lending<'all> + 'a,
I: Iterator<Item = <L as Lending<'a>>::Lend>,
I: Iterator<Item = Lend<'a, L>>,
{
LendIter { iter, _marker: core::marker::PhantomData }
}
Expand All @@ -162,24 +162,20 @@ pub struct LendIter<'a, L: ?Sized, I> {
impl<'a, 'lend, L, I> Lending<'lend> for LendIter<'a, L, I>
where
L: ?Sized + for<'all> Lending<'all> + 'a,
I: Iterator<Item = <L as Lending<'a>>::Lend>,
I: Iterator<Item = Lend<'a, L>>,
{
type Lend = Lend<'lend, L>;
}

impl<'a, L, I> Lender for LendIter<'a, L, I>
where
L: ?Sized + for<'all> Lending<'all> + 'a,
I: Iterator<Item = <L as Lending<'a>>::Lend>,
I: Iterator<Item = Lend<'a, L>>,
{
#[inline]
fn next(&mut self) -> Option<<Self as Lending<'_>>::Lend> {
fn next(&mut self) -> Option<Lend<'_, Self>> {
// SAFETY: 'a: 'lend
unsafe {
core::mem::transmute::<Option<<Self as Lending<'a>>::Lend>, Option<<Self as Lending<'_>>::Lend>>(
self.iter.next(),
)
}
unsafe { core::mem::transmute::<Option<Lend<'a, Self>>, Option<Lend<'_, Self>>>(self.iter.next()) }
}
#[inline]
fn size_hint(&self) -> (usize, Option<usize>) {
Expand All @@ -190,22 +186,18 @@ where
impl<'a, L, I> DoubleEndedLender for LendIter<'a, L, I>
where
L: ?Sized + for<'all> Lending<'all> + 'a,
I: DoubleEndedIterator<Item = <L as Lending<'a>>::Lend>,
I: DoubleEndedIterator<Item = Lend<'a, L>>,
{
fn next_back(&mut self) -> Option<<Self as Lending<'_>>::Lend> {
fn next_back(&mut self) -> Option<Lend<'_, Self>> {
// SAFETY: 'a: 'lend
unsafe {
core::mem::transmute::<Option<<Self as Lending<'a>>::Lend>, Option<<Self as Lending<'_>>::Lend>>(
self.iter.next_back(),
)
}
unsafe { core::mem::transmute::<Option<Lend<'a, Self>>, Option<Lend<'_, Self>>>(self.iter.next_back()) }
}
}

impl<'a, L, I> ExactSizeLender for LendIter<'a, L, I>
where
L: ?Sized + for<'all> Lending<'all> + 'a,
I: ExactSizeIterator<Item = <L as Lending<'a>>::Lend>,
I: ExactSizeIterator<Item = Lend<'a, L>>,
{
fn len(&self) -> usize {
self.iter.len()
Expand All @@ -215,6 +207,6 @@ where
impl<'a, L, I> FusedLender for LendIter<'a, L, I>
where
L: ?Sized + for<'all> Lending<'all> + 'a,
I: FusedIterator<Item = <L as Lending<'a>>::Lend>,
I: FusedIterator<Item = Lend<'a, L>>,
{
}

0 comments on commit a48458c

Please sign in to comment.