1use alloc::collections::BTreeMap;
6
7use crate::rstar::RTreeObject;
8use maplike::abc::Keyed;
9use maplike::iter::IntoIter;
10use maplike::ops::{Get, Insert, Remove};
11
12use crate::RTreed;
13use undoredo::{ApplyDelta, Delta};
14
15pub type RTreedHalfDelta<K, V> = BTreeMap<K, V>;
17
18pub type RTreedDelta<K, V> = Delta<RTreedHalfDelta<K, V>>;
20
21impl<
22 K: Clone + PartialEq,
23 V: Clone + PartialEq + RTreeObject,
24 C: Get<K> + Keyed<Key = K, Value = V> + Insert<K> + Remove<K, Output = Option<V>>,
25 DC: IntoIter<K> + Keyed<Key = K, Value = V>,
26> ApplyDelta<DC> for RTreed<C>
27{
28 #[inline]
29 fn apply_delta(&mut self, delta: Delta<DC>) {
30 let (removed, inserted) = delta.dissolve();
31
32 for (removed_key, _removed_value) in removed.into_iter() {
33 self.remove(&removed_key);
34 }
35
36 for (inserted_key, inserted_value) in inserted.into_iter() {
37 self.insert(inserted_key, inserted_value);
38 }
39 }
40}