aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Duerr <contact@christianduerr.com>2018-05-01 20:07:59 +0200
committerChristian Duerr <contact@christianduerr.com>2018-05-01 20:07:59 +0200
commit0853fafe4883b5977849795027f154bae37c139c (patch)
tree106f8290c1fa38ced8b3060e26d44a330ca3dd90
parent946ef1e3067daef4b8131d5cc7c8d87175465e0a (diff)
downloadalacritty-0853fafe4883b5977849795027f154bae37c139c.tar.gz
alacritty-0853fafe4883b5977849795027f154bae37c139c.zip
Remove `push` from `Storage`
Since every line is allocated at startup anyways, the `push` method on `Storage` has been removed and instead of pushing to the vector the initialization has been moved to the `with_capacity` method. This has the advantage that we don't need to keep track of the `len` in push (like adding one), but we just need to worry about growing/shrinking the visible area.
-rw-r--r--src/grid/mod.rs12
-rw-r--r--src/grid/storage.rs18
2 files changed, 12 insertions, 18 deletions
diff --git a/src/grid/mod.rs b/src/grid/mod.rs
index 13e6cc00..740c036a 100644
--- a/src/grid/mod.rs
+++ b/src/grid/mod.rs
@@ -114,17 +114,7 @@ pub enum Scroll {
impl<T: Copy + Clone> Grid<T> {
pub fn new(lines: index::Line, cols: index::Column, scrollback: usize, template: T) -> Grid<T> {
- let mut raw = Storage::with_capacity(*lines + scrollback, lines);
-
- // Allocate all lines in the buffer, including scrollback history
- //
- // TODO (jwilm) Allocating each line at this point is expensive and
- // delays startup. A nice solution might be having `Row` delay
- // allocation until it's actually used.
- for _ in 0..raw.len() {
- raw.push(Row::new(cols, &template));
- }
-
+ let raw = Storage::with_capacity(*lines + scrollback, lines, Row::new(cols, &template));
Grid {
raw,
cols,
diff --git a/src/grid/storage.rs b/src/grid/storage.rs
index 63b30831..ba9a2d41 100644
--- a/src/grid/storage.rs
+++ b/src/grid/storage.rs
@@ -36,9 +36,18 @@ impl<T: PartialEq> ::std::cmp::PartialEq for Storage<T> {
impl<T> Storage<T> {
#[inline]
- pub fn with_capacity(cap: usize, lines: Line) -> Storage<T> {
+ pub fn with_capacity(cap: usize, lines: Line, template: T) -> Storage<T>
+ where
+ T: Clone,
+ {
+ // Allocate all lines in the buffer, including scrollback history
+ //
+ // TODO (jwilm) Allocating each line at this point is expensive and
+ // delays startup. A nice solution might be having `Row` delay
+ // allocation until it's actually used.
+ let inner = vec![template; cap];
Storage {
- inner: Vec::with_capacity(cap),
+ inner,
zero: 0,
visible_lines: lines - 1,
len: cap,
@@ -90,11 +99,6 @@ impl<T> Storage<T> {
}
#[inline]
- pub fn push(&mut self, item: T) {
- self.inner.push(item)
- }
-
- #[inline]
pub fn len(&self) -> usize {
self.len
}