rustfst 0.5.0

Library for constructing, combining, optimizing, and searching weighted finite-state transducers (FSTs).
Documentation
use crate::fst_impls::vector_fst::VectorFst;
use crate::fst_traits::AllocableFst;
use crate::semirings::Semiring;
use crate::StateId;
use failure::Fallible;

impl<W: 'static + Semiring> AllocableFst for VectorFst<W> {
    fn reserve_arcs(&mut self, source: usize, additional: usize) -> Fallible<()> {
        self.states
            .get_mut(source)
            .ok_or_else(|| format_err!("State {:?} doesn't exist", source))?
            .arcs
            .reserve(additional);
        Ok(())
    }

    #[inline]
    unsafe fn reserve_arcs_unchecked(&mut self, source: usize, additional: usize) {
        self.states
            .get_unchecked_mut(source)
            .arcs
            .reserve(additional)
    }

    #[inline]
    fn reserve_states(&mut self, additional: usize) {
        self.states.reserve(additional);
    }

    fn shrink_to_fit(&mut self) {
        self.states.shrink_to_fit();
        for state in self.states.iter_mut() {
            state.arcs.shrink_to_fit();
        }
    }

    #[inline]
    fn shrink_to_fit_states(&mut self) {
        self.states.shrink_to_fit()
    }

    fn shrink_to_fit_arcs(&mut self, source: StateId) -> Fallible<()> {
        self.states
            .get_mut(source)
            .ok_or_else(|| format_err!("State {:?} doesn't exist", source))?
            .arcs
            .shrink_to_fit();
        Ok(())
    }

    #[inline]
    unsafe fn shrink_to_fit_arcs_unchecked(&mut self, source: StateId) {
        self.states.get_unchecked_mut(source).arcs.shrink_to_fit()
    }

    #[inline]
    fn states_capacity(&self) -> usize {
        self.states.capacity()
    }

    fn arcs_capacity(&self, source: StateId) -> Fallible<usize> {
        Ok(self
            .states
            .get(source)
            .ok_or_else(|| format_err!("State {:?} doesn't exist", source))?
            .arcs
            .capacity())
    }

    #[inline]
    unsafe fn arcs_capacity_unchecked(&self, source: StateId) -> usize {
        self.states.get_unchecked(source).arcs.capacity()
    }
}