use crate::*;
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(
any(feature = "encode", feature = "serde"),
derive(serde::Serialize, serde::Deserialize)
)]
pub struct Insertion {
anchor: Anchor,
anchor_ts: RunTs,
text: Text,
run_ts: RunTs,
lamport_ts: LamportTs,
}
impl Insertion {
#[inline(always)]
pub(crate) fn anchor(&self) -> Anchor {
self.anchor
}
#[inline(always)]
pub(crate) fn anchor_ts(&self) -> RunTs {
self.anchor_ts
}
#[inline(always)]
pub(crate) fn end(&self) -> Length {
self.text.range.end
}
#[inline(always)]
pub(crate) fn inserted_by(&self) -> ReplicaId {
self.text.inserted_by()
}
#[inline]
pub(crate) fn is_no_op(&self) -> bool {
self.len() == 0
}
#[inline(always)]
pub(crate) fn run_ts(&self) -> RunTs {
self.run_ts
}
#[inline(always)]
pub(crate) fn lamport_ts(&self) -> LamportTs {
self.lamport_ts
}
#[inline]
pub(crate) fn len(&self) -> Length {
self.text.len()
}
#[inline]
pub(crate) fn new(
anchor: Anchor,
anchor_ts: RunTs,
text: Text,
lamport_ts: LamportTs,
run_ts: RunTs,
) -> Self {
Self { anchor, anchor_ts, text, lamport_ts, run_ts }
}
#[inline]
pub(crate) fn no_op() -> Self {
Self::new(Anchor::zero(), 0, Text::new(0, 0..0), 0, 0)
}
#[inline]
pub(crate) fn start(&self) -> Length {
self.text.range.start
}
#[inline]
pub fn text(&self) -> &Text {
&self.text
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(
any(feature = "encode", feature = "serde"),
derive(serde::Serialize, serde::Deserialize)
)]
pub struct Deletion {
start: Anchor,
start_ts: RunTs,
end: Anchor,
end_ts: RunTs,
version_map: VersionMap,
deletion_ts: DeletionTs,
}
impl Deletion {
#[inline(always)]
pub(crate) fn deleted_by(&self) -> ReplicaId {
self.version_map.this_id()
}
#[inline(always)]
pub(crate) fn deletion_ts(&self) -> DeletionTs {
self.deletion_ts
}
#[inline(always)]
pub(crate) fn end(&self) -> Anchor {
self.end
}
#[inline(always)]
pub(crate) fn end_ts(&self) -> RunTs {
self.end_ts
}
#[inline]
pub(crate) fn is_no_op(&self) -> bool {
self.end.is_zero()
}
#[inline]
pub(crate) fn new(
start: Anchor,
start_ts: RunTs,
end: Anchor,
end_ts: RunTs,
version_map: VersionMap,
deletion_ts: DeletionTs,
) -> Self {
Deletion { start, start_ts, end, end_ts, version_map, deletion_ts }
}
#[inline]
pub(crate) fn no_op() -> Self {
Self::new(
Anchor::zero(),
0,
Anchor::zero(),
0,
VersionMap::new(0, 0),
0,
)
}
#[inline(always)]
pub(crate) fn start(&self) -> Anchor {
self.start
}
#[inline(always)]
pub(crate) fn start_ts(&self) -> RunTs {
self.start_ts
}
#[inline(always)]
pub(crate) fn version_map(&self) -> &VersionMap {
&self.version_map
}
}