mirror of https://github.com/helix-editor/helix
Optimize Changeset::is_empty()
Checked the ASM output for these three options:
pub enum Operation {
/// Move cursor by n characters.
Retain(usize),
/// Delete n characters.
Delete(usize),
/// Insert text at position.
Insert(String),
}
pub struct A {
changes: Vec<Operation>,
len: usize,
}
impl A {
pub fn is_empty1(&self) -> bool {
match self.changes.as_slice() {
[] => true,
[Operation::Retain(_)] => true,
_ => false,
}
}
/// `true` when the set is empty.
pub fn is_empty2(&self) -> bool {
let len = self.changes.len();
len == 0
|| (
len == 1
&& self.changes[0] == Operation::Retain(self.len)
)
}
pub fn is_empty3(&self) -> bool {
match self.changes.as_slice() {
[] | [Operation::Retain(_)] => true,
_ => false
}
}
}
pull/8/head
parent
b0b5451c38
commit
9821c4dd3b
|
|
@ -314,8 +314,10 @@ impl ChangeSet {
|
|||
/// `true` when the set is empty.
|
||||
#[inline]
|
||||
pub fn is_empty(&self) -> bool {
|
||||
let len = self.changes.len();
|
||||
len == 0 || (len == 1 && self.changes[0] == Operation::Retain(self.len))
|
||||
match self.changes.as_slice() {
|
||||
[] | [Operation::Retain(_)] => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
/// Map a position through the changes.
|
||||
|
|
|
|||
Loading…
Reference in New Issue