use std::sync::{Arc, RwLock};
#[derive(Clone, Debug, Default)]
pub struct AxisLink {
inner: Arc<RwLock<AxisLinkInner>>,
}
#[derive(Debug, Default)]
struct AxisLinkInner {
position: f64,
half_extent: f64,
version: u64,
}
impl AxisLink {
pub fn new() -> Self {
Default::default()
}
pub(crate) fn get(&self) -> (f64, f64, u64) {
let inner = self.inner.read().unwrap();
(inner.position, inner.half_extent, inner.version)
}
pub(crate) fn set(&self, position: f64, half_extent: f64) {
let mut inner = self.inner.write().unwrap();
inner.position = position;
inner.half_extent = half_extent;
inner.version = inner.version.wrapping_add(1);
}
pub(crate) fn version(&self) -> u64 {
self.inner.read().unwrap().version
}
}