extern crate alloc;
use alloc::vec::Vec;
use crate::metis::{DotFun, DotMap, DotSet, Dotted};
use super::{CursorStore, Replica};
impl Replica {
pub fn move_cursor(&mut self, device: u32, position: u64) {
let _ = self.cursors.compose_super(
|assigned| {
let leaf = DotFun::singleton(assigned, position);
DotMap::singleton(device, leaf)
},
|held| held.get(&device).map(DotFun::observed).unwrap_or_default(),
);
}
#[must_use]
pub fn cursor_positions(&self, device: u32) -> Vec<u64> {
self.cursors
.state()
.store()
.get(&device)
.map(|leaf| leaf.values().copied().collect())
.unwrap_or_default()
}
#[must_use]
pub fn cursor_owed_to(&self, peer_context: &DotSet) -> Dotted<CursorStore> {
self.cursors.owed_to(peer_context)
}
#[must_use]
pub fn cursor_context(&self) -> &DotSet {
self.cursors.state().context()
}
pub fn absorb_cursor(&mut self, from: u32, delta: &Dotted<CursorStore>) {
let _ = self.cursors.absorb(from, delta);
}
}