rome 0.1.3

An RDF library in pure Rust
Documentation
use super::compact_triple::*;
use super::graph::*;
use super::triple::*;
use iter::SortedIterator;
use std::marker::PhantomData;

pub struct GraphIterator<'g, SPO: 'g, OPS: 'g, T, F>
where
    SPO: CompactTriple<u32>,
    OPS: CompactTriple<u32>,
    T: CompactTriple<u32>,
{
    pub graph: &'g GraphData<SPO, OPS>,
    pub pos: usize,
    pub phantom: PhantomData<(T, F)>,
}

impl<'g, SPO, OPS, T, F> Iterator for GraphIterator<'g, SPO, OPS, T, F>
where
    SPO: CompactTriple<u32>,
    OPS: CompactTriple<u32>,
    T: CompactTriple<u32>,
    F: Index<SPO, OPS, T>,
{
    type Item = Triple<'g, SPO, OPS, T>;
    fn next(&mut self) -> Option<Self::Item> {
        if self.pos < F::index(self.graph).len() {
            let triple = F::index(self.graph)[self.pos];
            self.pos += 1;
            Some(Triple {
                graph: self.graph,
                triple,
            })
        } else {
            None
        }
    }
}
impl<'g, SPO, OPS, T, F> SortedIterator for GraphIterator<'g, SPO, OPS, T, F>
where
    SPO: CompactTriple<u32>,
    OPS: CompactTriple<u32>,
    T: CompactTriple<u32>,
    F: Index<SPO, OPS, T>,
{
}

pub struct TripleRangeIterator<'g, SPO: 'g, OPS: 'g, T, F>
where
    SPO: CompactTriple<u32>,
    OPS: CompactTriple<u32>,
    T: CompactTriple<u32>,
{
    pub graph: &'g GraphData<SPO, OPS>,
    pub pos: usize,
    pub end: T,
    pub phantom: PhantomData<F>,
}

impl<'g, SPO, OPS, T, F> Iterator for TripleRangeIterator<'g, SPO, OPS, T, F>
where
    SPO: CompactTriple<u32>,
    OPS: CompactTriple<u32>,
    T: CompactTriple<u32>,
    F: Index<SPO, OPS, T>,
{
    type Item = Triple<'g, SPO, OPS, T>;
    fn next(&mut self) -> Option<Self::Item> {
        if self.pos < F::index(self.graph).len() {
            let triple = F::index(self.graph)[self.pos];
            self.pos += 1;
            if triple < self.end {
                Some(Triple {
                    graph: self.graph,
                    triple,
                })
            } else {
                None
            }
        } else {
            None
        }
    }
}
impl<'g, SPO, OPS, T, F> SortedIterator for TripleRangeIterator<'g, SPO, OPS, T, F>
where
    SPO: CompactTriple<u32>,
    OPS: CompactTriple<u32>,
    T: CompactTriple<u32>,
    F: Index<SPO, OPS, T>,
{
}