1
0
Fork 0
mirror of https://github.com/alacritty/alacritty.git synced 2024-11-25 14:05:41 -05:00

Optimize Storage::swap_lines

Saves a few cycles in a *very* hot function.
This commit is contained in:
Joe Wilm 2018-05-18 20:44:54 -07:00
parent ac93f6d031
commit 4b1a3b1e92

View file

@ -176,13 +176,10 @@ impl<T> Storage<T> {
(requested + self.zero) % self.inner.len() (requested + self.zero) % self.inner.len()
} }
fn compute_line_index(&self, requested: Line) -> usize {
((self.inner.len() + self.zero + *self.visible_lines) - *requested) % self.inner.len()
}
pub fn swap_lines(&mut self, a: Line, b: Line) { pub fn swap_lines(&mut self, a: Line, b: Line) {
let a = self.compute_line_index(a); let offset = self.inner.len() + self.zero + *self.visible_lines;
let b = self.compute_line_index(b); let a = (offset - *a) % self.inner.len();
let b = (offset - *b) % self.inner.len();
self.inner.swap(a, b); self.inner.swap(a, b);
} }
@ -191,9 +188,10 @@ impl<T> Storage<T> {
} }
pub fn rotate(&mut self, count: isize) { pub fn rotate(&mut self, count: isize) {
debug_assert!(count.abs() as usize <= self.inner.len());
let len = self.inner.len(); let len = self.inner.len();
assert!(count.abs() as usize <= len); self.zero = (self.zero as isize + count + len as isize) as usize % len;
self.zero += (count + len as isize) as usize % len;
} }
// Fast path // Fast path