use super::node::{Leaf, Node};
use std::fmt::Debug;
use std::hash::Hash;
#[derive(Debug)]
pub(crate) enum LeafInsertState<K, V>
where
K: Hash + Eq + Clone + Debug,
V: Clone,
{
Ok(Option<V>),
Split(*mut Leaf<K, V>),
RevSplit(*mut Leaf<K, V>),
}
#[derive(Debug)]
pub(crate) enum LeafRemoveState<V>
where
V: Clone,
{
Ok(Option<V>),
Shrink(Option<V>),
}
#[derive(Debug)]
pub(crate) enum BranchInsertState<K, V>
where
K: Hash + Eq + Clone + Debug,
V: Clone,
{
Ok,
Split(*mut Node<K, V>, *mut Node<K, V>),
}
#[derive(Debug)]
pub(crate) enum BranchShrinkState<K, V>
where
K: Hash + Eq + Clone + Debug,
V: Clone,
{
Balanced,
Merge(*mut Node<K, V>),
Shrink(*mut Node<K, V>),
}
#[derive(Debug)]
pub(crate) enum CRInsertState<K, V>
where
K: Hash + Eq + Clone + Debug,
V: Clone,
{
NoClone(Option<V>),
Clone(Option<V>, *mut Node<K, V>),
Split(*mut Node<K, V>),
RevSplit(*mut Node<K, V>),
CloneSplit(*mut Node<K, V>, *mut Node<K, V>),
CloneRevSplit(*mut Node<K, V>, *mut Node<K, V>),
}
#[derive(Debug)]
pub(crate) enum CRCloneState<K, V>
where
K: Hash + Eq + Clone + Debug,
V: Clone,
{
Clone(*mut Node<K, V>),
NoClone,
}
#[derive(Debug)]
pub(crate) enum CRRemoveState<K, V>
where
K: Hash + Eq + Clone + Debug,
V: Clone,
{
NoClone(Option<V>),
Clone(Option<V>, *mut Node<K, V>),
Shrink(Option<V>),
CloneShrink(Option<V>, *mut Node<K, V>),
}