use alloc::collections::BTreeMap;
use maplike::abc::Keyed;
use maplike::iter::IntoIter;
use maplike::ops::{Insert, Remove};
use undoredo::{ApplyDelta, Delta};
use super::{RTree, RTreeObject};
pub type RTreeHalfDelta<K> = BTreeMap<K, ()>;
pub type RTreeDelta<K> = Delta<RTreeHalfDelta<K>>;
impl<K: RTreeObject + PartialEq, DC: IntoIter<K> + Keyed<Value = (), Key = K>> ApplyDelta<DC>
for RTree<K>
{
#[inline]
fn apply_delta(&mut self, delta: Delta<DC>) {
let (removed, inserted) = delta.dissolve();
for (removed_key, _removed_value) in removed.into_iter() {
Remove::remove(self, &removed_key);
}
for (inserted_key, inserted_value) in inserted.into_iter() {
Insert::insert(self, inserted_key, inserted_value);
}
}
}