use std::hash::Hash;
use std::ops::RangeBounds;
use crate::bounds::{Key, Value};
use crate::clock::{NodeId, Timestamp};
use rsos::Fingerprint;
use super::Replica;
impl<K: Key + Hash, V: Value> Replica<K, V> {
pub fn fingerprint<R: RangeBounds<K>>(&self, range: R) -> Fingerprint {
self.map.read().aggregate(range).fingerprint()
}
pub fn value_fingerprint<R: RangeBounds<K>>(&self, range: R) -> Fingerprint {
self.projection.read().aggregate(range).fingerprint()
}
pub fn clock_now(&self) -> Timestamp {
self.clock.now()
}
pub(crate) fn clock_observe_trusted(&self, stamp: Timestamp) {
self.clock.observe_trusted(stamp);
}
pub(crate) fn node_id_is_random(&self) -> bool {
self.node_id_is_random
}
pub(crate) fn node_id(&self) -> NodeId {
self.clock.node_id()
}
}