From b3f13ce325a6022f5681503d47caf40cd24b8e85 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 1 Jun 2021 16:57:03 +0200 Subject: [PATCH] Pull up `VersionedOffset` --- zed/src/editor/buffer.rs | 116 +++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/zed/src/editor/buffer.rs b/zed/src/editor/buffer.rs index fefeb40d5bc9b87ee5fa53f726183a2961961fe7..8d4ada41c00a521ac5839abe9489f831acdf514b 100644 --- a/zed/src/editor/buffer.rs +++ b/zed/src/editor/buffer.rs @@ -2001,64 +2001,6 @@ impl Buffer { } fn summary_for_anchor(&self, anchor: &Anchor) -> TextSummary { - #[derive(Copy, Clone, Debug, Eq, PartialEq)] - enum VersionedOffset { - Offset(usize), - InvalidVersion, - } - - impl VersionedOffset { - fn offset(&self) -> usize { - if let Self::Offset(offset) = self { - *offset - } else { - panic!("invalid version") - } - } - } - - impl Default for VersionedOffset { - fn default() -> Self { - Self::Offset(0) - } - } - - impl<'a> sum_tree::Dimension<'a, FragmentSummary> for VersionedOffset { - fn add_summary(&mut self, summary: &'a FragmentSummary, cx: &Option) { - if let Self::Offset(offset) = self { - let version = cx.as_ref().unwrap(); - if *version >= summary.max_insertion_version { - *offset += summary.text.visible + summary.text.deleted; - } else if !summary - .min_insertion_version - .iter() - .all(|t| !version.observed(*t)) - { - *self = Self::InvalidVersion; - } - } else { - unreachable!(); - } - } - } - - impl<'a> sum_tree::SeekDimension<'a, FragmentSummary> for VersionedOffset { - fn cmp(&self, other: &Self, _: &Option) -> cmp::Ordering { - match (self, other) { - (Self::Offset(a), Self::Offset(b)) => Ord::cmp(a, b), - (Self::Offset(_), Self::InvalidVersion) => cmp::Ordering::Less, - (Self::InvalidVersion, _) => unreachable!(), - } - } - } - - impl<'a> sum_tree::Dimension<'a, FragmentSummary> for (VersionedOffset, usize) { - fn add_summary(&mut self, summary: &'a FragmentSummary, cx: &Option) { - self.0.add_summary(summary, cx); - self.1 += summary.text.visible; - } - } - match anchor { Anchor::Start => TextSummary::default(), Anchor::End => self.text_summary(), @@ -2641,6 +2583,64 @@ impl<'a> sum_tree::Dimension<'a, InsertionSplitSummary> for usize { } } +#[derive(Copy, Clone, Debug, Eq, PartialEq)] +enum VersionedOffset { + Offset(usize), + InvalidVersion, +} + +impl VersionedOffset { + fn offset(&self) -> usize { + if let Self::Offset(offset) = self { + *offset + } else { + panic!("invalid version") + } + } +} + +impl Default for VersionedOffset { + fn default() -> Self { + Self::Offset(0) + } +} + +impl<'a> sum_tree::Dimension<'a, FragmentSummary> for VersionedOffset { + fn add_summary(&mut self, summary: &'a FragmentSummary, cx: &Option) { + if let Self::Offset(offset) = self { + let version = cx.as_ref().unwrap(); + if *version >= summary.max_insertion_version { + *offset += summary.text.visible + summary.text.deleted; + } else if !summary + .min_insertion_version + .iter() + .all(|t| !version.observed(*t)) + { + *self = Self::InvalidVersion; + } + } else { + unreachable!(); + } + } +} + +impl<'a> sum_tree::SeekDimension<'a, FragmentSummary> for VersionedOffset { + fn cmp(&self, other: &Self, _: &Option) -> cmp::Ordering { + match (self, other) { + (Self::Offset(a), Self::Offset(b)) => Ord::cmp(a, b), + (Self::Offset(_), Self::InvalidVersion) => cmp::Ordering::Less, + (Self::InvalidVersion, _) => unreachable!(), + } + } +} + +impl<'a> sum_tree::Dimension<'a, FragmentSummary> for (VersionedOffset, usize) { + fn add_summary(&mut self, summary: &'a FragmentSummary, cx: &Option) { + self.0.add_summary(summary, cx); + self.1 += summary.text.visible; + } +} + impl Operation { fn replica_id(&self) -> ReplicaId { self.lamport_timestamp().replica_id