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.
This commit is contained in:
Christian Duerr 2018-05-01 20:07:59 +02:00 committed by Joe Wilm
parent a3c6c1db63
commit eabd6bb95b
2 changed files with 12 additions and 18 deletions

View File

@ -118,17 +118,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,

View File

@ -67,9 +67,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,
@ -120,11 +129,6 @@ impl<T> Storage<T> {
self.visible_lines = next - 1;
}
#[inline]
pub fn push(&mut self, item: T) {
self.inner.push(item)
}
#[inline]
pub fn len(&self) -> usize {
self.len