Introduce Cursor::seek_start
to compute VersionedOffset
once
This commit is contained in:
parent
71f50ce361
commit
f294bfdbd9
3 changed files with 10 additions and 20 deletions
|
@ -1679,9 +1679,7 @@ impl Buffer {
|
|||
bias,
|
||||
version,
|
||||
} => {
|
||||
let mut cursor = self
|
||||
.fragments
|
||||
.cursor::<VersionedOffset, (VersionedOffset, usize)>();
|
||||
let mut cursor = self.fragments.cursor::<VersionedOffset, usize>();
|
||||
cursor.seek(
|
||||
&VersionedOffset::Offset(*offset),
|
||||
*bias,
|
||||
|
@ -1689,12 +1687,12 @@ impl Buffer {
|
|||
);
|
||||
let fragment = cursor.item().unwrap();
|
||||
let overshoot = if fragment.visible {
|
||||
offset - cursor.start().0.offset()
|
||||
offset - cursor.seek_start().offset()
|
||||
} else {
|
||||
0
|
||||
};
|
||||
|
||||
self.text_summary_for_range(0..cursor.start().1 + overshoot)
|
||||
self.text_summary_for_range(0..cursor.start() + overshoot)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1713,14 +1711,14 @@ impl Buffer {
|
|||
} => {
|
||||
let mut cursor = self
|
||||
.fragments
|
||||
.cursor::<VersionedOffset, (VersionedOffset, FragmentTextSummary)>();
|
||||
.cursor::<VersionedOffset, FragmentTextSummary>();
|
||||
cursor.seek(
|
||||
&VersionedOffset::Offset(*offset),
|
||||
*bias,
|
||||
&Some(version.clone()),
|
||||
);
|
||||
let overshoot = offset - cursor.start().0.offset();
|
||||
let summary = cursor.start().1;
|
||||
let overshoot = offset - cursor.seek_start().offset();
|
||||
let summary = cursor.start();
|
||||
summary.visible + summary.deleted + overshoot
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,18 +37,6 @@ impl<'a, T: Summary> Dimension<'a, T> for () {
|
|||
fn add_summary(&mut self, _: &'a T, _: &T::Context) {}
|
||||
}
|
||||
|
||||
impl<'a, S, D1, D2> Dimension<'a, S> for (D1, D2)
|
||||
where
|
||||
S: Summary,
|
||||
D1: Dimension<'a, S>,
|
||||
D2: Dimension<'a, S>,
|
||||
{
|
||||
fn add_summary(&mut self, summary: &'a S, cx: &S::Context) {
|
||||
self.0.add_summary(summary, cx);
|
||||
self.1.add_summary(summary, cx);
|
||||
}
|
||||
}
|
||||
|
||||
pub trait SeekDimension<'a, T: Summary>: Dimension<'a, T> {
|
||||
fn cmp(&self, other: &Self, cx: &T::Context) -> Ordering;
|
||||
}
|
||||
|
|
|
@ -45,6 +45,10 @@ where
|
|||
self.sum_dimension = U::default();
|
||||
}
|
||||
|
||||
pub fn seek_start(&self) -> &S {
|
||||
&self.seek_dimension
|
||||
}
|
||||
|
||||
pub fn start(&self) -> &U {
|
||||
&self.sum_dimension
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue