fffl 0.9.3

A contiguous First-fit Freelist
Documentation
use std::{iter::FilterMap, vec::IntoIter};

use crate::{Freelist, Slot};


pub struct FreelistIter<T> {
    filter_map: FilterMap<IntoIter<Slot<T>>, fn(Slot<T>) -> Option<T>>,
}

impl <T> FreelistIter<T> {
    #[inline]
    pub(super) fn new(freelist: Freelist<T>) -> Self {
        Self {
            filter_map: freelist.slots
                .into_iter()
                .filter_map(Into::into)
        }
    }
}

impl <T> Iterator for FreelistIter<T> {
    type Item = T;
    
    #[inline]
    fn next(&mut self) -> Option<Self::Item> { self.filter_map.next() }

    #[inline]
    fn  size_hint(&self) -> (usize, Option<usize>) { self.filter_map.size_hint() }
}

impl <T> DoubleEndedIterator for FreelistIter<T> {
    fn next_back(&mut self) -> Option<Self::Item> { self.filter_map.next_back() }
}