use crate::fst_traits::CoreFst;
use crate::semirings::Semiring;
use crate::tr::Tr;
use crate::StateId;
pub trait StateIterator<'a> {
type Iter: Iterator<Item = StateId>;
fn states_iter(&'a self) -> Self::Iter;
}
pub struct FstIterData<W, I> {
pub state_id: StateId,
pub final_weight: Option<W>,
pub trs: I,
pub num_trs: usize,
}
pub trait FstIntoIterator<W: Semiring>: CoreFst<W> {
type TrsIter: Iterator<Item = Tr<W>>;
type FstIter: Iterator<Item = FstIterData<W, Self::TrsIter>>;
fn fst_into_iter(self) -> Self::FstIter;
}
pub trait FstIterator<'a, W: Semiring>: CoreFst<W> {
type FstIter: Iterator<Item = FstIterData<W, Self::TRS>>;
fn fst_iter(&'a self) -> Self::FstIter;
}