use crate::cdc::change::ChangeEvent;
use crate::concurrent::set::BTreeSet;
use crate::core::node::NodeLike;
use ::core::fmt::Debug;
use alloc::vec::Vec;
pub mod ord;
pub use ord::OrdMultiPair;
pub type MultiPair<K, V> = OrdMultiPair<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;
fn adopt_stored_identity(_stored: &Self, _incoming: &mut Self) {}
}
pub trait MultiPairInsertHelper<K, V>: MultiPairLike<K, V> {
fn insert_into<Node>(set: &BTreeSet<Self, Node>, key: K, value: V) -> Option<(K, V)>
where
Self: Debug + Ord + Clone + Send + 'static,
Node: NodeLike<Self> + Send + 'static;
#[cfg(feature = "cdc")]
fn insert_cdc_into<Node>(set: &BTreeSet<Self, Node>, key: K, value: V) -> (Option<(K, V)>, Vec<ChangeEvent<Self>>)
where
Self: Debug + Ord + Clone + Send + 'static,
Node: NodeLike<Self> + Send + 'static;
}
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;
}