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,
|
bias,
|
||||||
version,
|
version,
|
||||||
} => {
|
} => {
|
||||||
let mut cursor = self
|
let mut cursor = self.fragments.cursor::<VersionedOffset, usize>();
|
||||||
.fragments
|
|
||||||
.cursor::<VersionedOffset, (VersionedOffset, usize)>();
|
|
||||||
cursor.seek(
|
cursor.seek(
|
||||||
&VersionedOffset::Offset(*offset),
|
&VersionedOffset::Offset(*offset),
|
||||||
*bias,
|
*bias,
|
||||||
|
@ -1689,12 +1687,12 @@ impl Buffer {
|
||||||
);
|
);
|
||||||
let fragment = cursor.item().unwrap();
|
let fragment = cursor.item().unwrap();
|
||||||
let overshoot = if fragment.visible {
|
let overshoot = if fragment.visible {
|
||||||
offset - cursor.start().0.offset()
|
offset - cursor.seek_start().offset()
|
||||||
} else {
|
} else {
|
||||||
0
|
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
|
let mut cursor = self
|
||||||
.fragments
|
.fragments
|
||||||
.cursor::<VersionedOffset, (VersionedOffset, FragmentTextSummary)>();
|
.cursor::<VersionedOffset, FragmentTextSummary>();
|
||||||
cursor.seek(
|
cursor.seek(
|
||||||
&VersionedOffset::Offset(*offset),
|
&VersionedOffset::Offset(*offset),
|
||||||
*bias,
|
*bias,
|
||||||
&Some(version.clone()),
|
&Some(version.clone()),
|
||||||
);
|
);
|
||||||
let overshoot = offset - cursor.start().0.offset();
|
let overshoot = offset - cursor.seek_start().offset();
|
||||||
let summary = cursor.start().1;
|
let summary = cursor.start();
|
||||||
summary.visible + summary.deleted + overshoot
|
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) {}
|
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> {
|
pub trait SeekDimension<'a, T: Summary>: Dimension<'a, T> {
|
||||||
fn cmp(&self, other: &Self, cx: &T::Context) -> Ordering;
|
fn cmp(&self, other: &Self, cx: &T::Context) -> Ordering;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,10 @@ where
|
||||||
self.sum_dimension = U::default();
|
self.sum_dimension = U::default();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn seek_start(&self) -> &S {
|
||||||
|
&self.seek_dimension
|
||||||
|
}
|
||||||
|
|
||||||
pub fn start(&self) -> &U {
|
pub fn start(&self) -> &U {
|
||||||
&self.sum_dimension
|
&self.sum_dimension
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue