use crate::{batch::BoxedVec, db::TableId};
pub type ImKeyCollection = im::HashSet<BoxedVec, fxhash::FxBuildHasher>;
pub type MaybeImKeyCollection = Option<ImKeyCollection>;
#[derive(Default, Clone)]
pub struct VerticalKeys(Vec<MaybeImKeyCollection>);
impl VerticalKeys {
pub fn enable(&mut self, index: usize) {
if index < self.0.len() {
self.0[index] = Some(ImKeyCollection::default());
} else {
self.0.resize(index, None);
self.0.push(Some(ImKeyCollection::default()));
}
}
#[inline(always)]
pub fn update<F>(&mut self, tid: TableId, closure: F)
where
F: FnOnce(&mut ImKeyCollection),
{
let tid = tid as usize;
if tid < self.0.len() {
if let Some(data) = &mut self.0[tid] {
closure(data);
}
}
}
#[inline(always)]
pub fn get(&self, tid: TableId) -> &MaybeImKeyCollection {
let tid = tid as usize;
if tid >= self.0.len() {
return &None;
}
&self.0[tid]
}
}