use super::super::mutable_csr::VertexEdgesIter;
use super::super::{
FrozenRowIter, ImmutableCsrIterator, MutableCsrIterator, Nbr, PureAllIter, PureRowIter,
SingleMutableCsrIterator, VertexId,
};
pub enum CsrIterator<'a> {
Multiple(MutableCsrIterator<'a>),
Single(SingleMutableCsrIterator<'a>),
Pure(PureAllIter<'a>),
Bundled(PureAllIter<'a>),
Frozen(ImmutableCsrIterator<'a>),
None,
}
impl<'a> Iterator for CsrIterator<'a> {
type Item = (VertexId, Nbr);
fn next(&mut self) -> Option<Self::Item> {
match self {
CsrIterator::Multiple(iter) => iter.next(),
CsrIterator::Single(iter) => iter.next(),
CsrIterator::Pure(iter) => iter.next(),
CsrIterator::Bundled(iter) => iter.next(),
CsrIterator::Frozen(iter) => iter.next(),
CsrIterator::None => None,
}
}
}
pub enum CsrRowIter<'a> {
Multiple(VertexEdgesIter<'a>),
Single(std::option::IntoIter<Nbr>),
Pure(PureRowIter<'a>),
Bundled(PureRowIter<'a>),
Frozen(FrozenRowIter<'a>),
}
impl<'a> Iterator for CsrRowIter<'a> {
type Item = Nbr;
fn next(&mut self) -> Option<Self::Item> {
match self {
CsrRowIter::Multiple(iter) => iter.next(),
CsrRowIter::Single(iter) => iter.next(),
CsrRowIter::Pure(iter) => iter.next(),
CsrRowIter::Bundled(iter) => iter.next(),
CsrRowIter::Frozen(iter) => iter.next(),
}
}
}