use std::marker;
use crate::depot;
pub mod bitmap;
mod domain;
mod ordinal;
pub use domain::Domain;
pub use ordinal::Ordinal;
pub mod set;
mod stored;
pub use stored::Stored;
pub trait Access<P = ()>: crate::depot::raw::Source<P> {
fn into_live(self) -> crate::depot::raw::Proof<(Self, Self::Key), Initialized<P>> {
let key = self.key();
unsafe { crate::depot::raw::Proof::new((self, key)) }
}
fn read(&self) -> crate::depot::raw::Proof<(&Self, Self::Key), Initialized<P>> {
unsafe { crate::depot::raw::Proof::new((self, self.key())) }
}
}
impl<S: crate::depot::raw::Source<P>, P> Access<P> for S {}
pub struct Initialized<P>(marker::PhantomData<fn(P) -> P>);
pub struct Vacant<T>(marker::PhantomData<fn(T) -> T>);
impl<P> depot::Predicate for Initialized<P> {}
pub struct Unborrowed<P>(marker::PhantomData<fn(P) -> P>);
impl<P> depot::Predicate for Unborrowed<P> {}
pub trait Position:
crate::depot::raw::Word + crate::depot::raw::Link<Item = Self> + Ord + crate::depot::raw::Numeric
{
}
impl Position for u16 {}
impl Position for u32 {}