use crate::TokenId;
#[derive(Debug, Clone)]
pub struct FrozenDict {
keys: Vec<String>,
vals: Vec<TokenId>,
}
impl FrozenDict {
pub fn new(mut entries: Vec<(String, TokenId)>) -> Self {
entries.sort_by(|a, b| a.0.cmp(&b.0));
let mut keys = Vec::with_capacity(entries.len());
let mut vals = Vec::with_capacity(entries.len());
for (k, v) in entries {
keys.push(k);
vals.push(v);
}
Self { keys, vals }
}
pub fn lookup(&self, key: &str) -> Option<TokenId> {
match self.keys.binary_search_by(|probe| probe.as_str().cmp(key)) {
Ok(idx) => Some(self.vals[idx]),
Err(_) => None,
}
}
}