saku 0.1.6

A simple yet efficient rule-based Japanese Sentence Tokenizer.
Documentation
use crate::ControlFlow;

#[derive(Clone, Debug)]
pub struct CharTable {
    max_idx: usize,
    table: Vec<Option<ControlFlow>>,
}

impl Default for CharTable {
    #[inline]
    fn default() -> Self {
        Self {
            max_idx: 0,
            table: vec![None],
        }
    }
}

impl CharTable {
    #[inline(always)]
    pub(crate) fn insert(&mut self, idx: char, value: ControlFlow) {
        let idx = idx as usize;
        if idx > self.max_idx {
            self.table.extend(vec![None; idx - self.max_idx]);
            self.max_idx = idx;
        }
        self.table[idx] = Some(value)
    }
    #[inline(always)]
    pub(crate) fn get(&self, idx: char) -> Option<&ControlFlow> {
        let idx = idx as usize;
        if idx > self.max_idx {
            None
        } else {
            self.table[idx].as_ref()
        }
    }
}