use crate::{Teloid, TeloidID};
use deep_causality::{Datable, SpaceTemporal, Spatial, Symbolic, Temporal};
pub trait TeloidStorable<D, S, T, ST, SYM, VS, VT>
where
D: Clone + Datable,
S: Clone + Spatial<VS>,
ST: Clone + SpaceTemporal<VS, VT>,
SYM: Clone + Symbolic,
T: Clone + Temporal<VT>,
VS: Clone,
VT: Clone,
{
fn insert(
&mut self,
teloid: Teloid<D, S, T, ST, SYM, VS, VT>,
) -> Option<Teloid<D, S, T, ST, SYM, VS, VT>>;
fn get(&self, id: &TeloidID) -> Option<&Teloid<D, S, T, ST, SYM, VS, VT>>;
fn remove(&mut self, id: &TeloidID) -> Option<Teloid<D, S, T, ST, SYM, VS, VT>>;
fn update(
&mut self,
teloid: Teloid<D, S, T, ST, SYM, VS, VT>,
) -> Option<Teloid<D, S, T, ST, SYM, VS, VT>>;
fn contains_key(&self, id: &TeloidID) -> bool;
fn len(&self) -> usize;
fn is_empty(&self) -> bool;
fn clear(&mut self);
}