melib: fix bounds checking for StackVec
parent
8543a06f59
commit
a00e3fcbde
|
@ -38,7 +38,7 @@ impl<T: Default + Copy + std::fmt::Debug> StackVec<T> {
|
||||||
if self.len == 0 {
|
if self.len == 0 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
if self.len >= self.array.len() {
|
if self.len > self.array.len() {
|
||||||
self.len -= 1;
|
self.len -= 1;
|
||||||
self.heap_vec.pop()
|
self.heap_vec.pop()
|
||||||
} else {
|
} else {
|
||||||
|
@ -60,7 +60,7 @@ impl<T: Default + Copy + std::fmt::Debug> StackVec<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn remove(&mut self, i: usize) -> T {
|
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)
|
self.heap_vec.remove(i)
|
||||||
} else {
|
} else {
|
||||||
let ret = std::mem::replace(&mut self.array[i], T::default());
|
let ret = std::mem::replace(&mut self.array[i], T::default());
|
||||||
|
@ -71,6 +71,18 @@ impl<T: Default + Copy + std::fmt::Debug> StackVec<T> {
|
||||||
ret
|
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> {
|
pub struct StackVecIter<'a, T: Default + Copy + std::fmt::Debug> {
|
||||||
|
@ -108,7 +120,7 @@ impl<T: Default + Copy + std::fmt::Debug> Index<usize> for StackVec<T> {
|
||||||
type Output = T;
|
type Output = T;
|
||||||
|
|
||||||
fn index(&self, idx: usize) -> &T {
|
fn index(&self, idx: usize) -> &T {
|
||||||
if self.len >= self.array.len() {
|
if self.len > self.array.len() {
|
||||||
&self.heap_vec[idx]
|
&self.heap_vec[idx]
|
||||||
} else {
|
} else {
|
||||||
&self.array[idx]
|
&self.array[idx]
|
||||||
|
|
Loading…
Reference in New Issue