use crate::cdc::change::ChangeEvent;
use crate::concurrent::set::BTreeSet;
use crate::core::node::NodeLike;
pub mod ord;
pub mod random;
pub use ord::OrdMultiPair;
pub use random::RandomMultiPair;
pub type MultiPair<K, V> = RandomMultiPair<K, V>;
pub trait MultiPairLike<K, V>: Into<(K, V)> + Ord {
fn new(key: K, value: V) -> Self;
fn key(&self) -> &K;
fn value(&self) -> &V;
}
pub trait MultiPairRemoveHelper<K, V> {
fn remove_from<Node>(set: &BTreeSet<Self, Node>, key: &K, value: &V) -> Option<(K, V)>
where
Self: Ord + Clone + 'static,
Node: NodeLike<Self> + Send + 'static,
{
Self::remove_cdc_from(set, key, value).0
}
fn remove_cdc_from<Node>(
set: &BTreeSet<Self, Node>,
key: &K,
value: &V,
) -> (Option<(K, V)>, Vec<ChangeEvent<Self>>)
where
Self: Ord + Clone + 'static,
Node: NodeLike<Self> + Send + 'static;
}