From d32f0982a997e55e0a0d3038c9075544ba928f0d Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Mon, 7 Oct 2019 16:46:32 +0300 Subject: [PATCH] melib: StackVec fixups Fix bound checks and add clear() method --- melib/src/structs.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/melib/src/structs.rs b/melib/src/structs.rs index a52a417e..d4e7ce70 100644 --- a/melib/src/structs.rs +++ b/melib/src/structs.rs @@ -60,7 +60,8 @@ impl StackVec { } } pub fn remove(&mut self, i: usize) -> T { - if self.len > self.array.len() { + if self.len >= self.array.len() { + self.len -= 1; self.heap_vec.remove(i) } else { let ret = std::mem::replace(&mut self.array[i], T::default()); @@ -74,7 +75,7 @@ impl StackVec { pub fn set(&mut self, i: usize, val: T) { debug_assert!(i < self.len); - if self.len > self.array.len() { + if self.len >= self.array.len() { self.heap_vec[i] = val; if i + 1 < self.array.len() { self.array[i] = val; @@ -83,6 +84,10 @@ impl StackVec { self.array[i] = val; } } + + pub fn clear(&mut self) { + self.len = 0; + } } pub struct StackVecIter<'a, T: Default + Copy + std::fmt::Debug> { @@ -120,7 +125,7 @@ impl Index for StackVec { type Output = T; fn index(&self, idx: usize) -> &T { - if self.len > self.array.len() { + if self.len >= self.array.len() { &self.heap_vec[idx] } else { &self.array[idx]