diff --git a/melib/src/structs.rs b/melib/src/structs.rs index a3d93dc5c..a52a417e3 100644 --- a/melib/src/structs.rs +++ b/melib/src/structs.rs @@ -38,7 +38,7 @@ impl StackVec { if self.len == 0 { return None; } - if self.len >= self.array.len() { + if self.len > self.array.len() { self.len -= 1; self.heap_vec.pop() } else { @@ -60,7 +60,7 @@ impl StackVec { } } pub fn remove(&mut self, i: usize) -> T { - if self.len >= self.array.len() { + if self.len > self.array.len() { self.heap_vec.remove(i) } else { let ret = std::mem::replace(&mut self.array[i], T::default()); @@ -71,6 +71,18 @@ impl StackVec { ret } } + + pub fn set(&mut self, i: usize, val: T) { + debug_assert!(i < self.len); + if self.len > self.array.len() { + self.heap_vec[i] = val; + if i + 1 < self.array.len() { + self.array[i] = val; + } + } else { + self.array[i] = val; + } + } } pub struct StackVecIter<'a, T: Default + Copy + std::fmt::Debug> { @@ -108,7 +120,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]