get_relative_to_top -> nth_from_top
This commit is contained in:
parent
84331a9325
commit
7306f69271
|
@ -123,10 +123,10 @@ impl<T> StackWithLimit<T> {
|
||||||
|
|
||||||
/// Return optional reference to item `depth` distance away from top
|
/// Return optional reference to item `depth` distance away from top
|
||||||
///
|
///
|
||||||
/// `bstack.get_relative_to_top(0)` gets the top of the stack
|
/// `bstack.nth_from_top(0)` gets the top of the stack
|
||||||
///
|
///
|
||||||
/// `bstack.get_relative_to_top(1)` gets the item just below the stack
|
/// `bstack.nth_from_top(1)` gets the item just below the stack
|
||||||
pub(crate) fn get_relative_to_top(&self, depth: usize) -> Option<&T> {
|
pub(crate) fn nth_from_top(&self, depth: usize) -> Option<&T> {
|
||||||
// Be cognizant of integer underflow and overflow here. Both are possible in this situation.
|
// Be cognizant of integer underflow and overflow here. Both are possible in this situation.
|
||||||
// len() is unsigned, so if len() == 0, subtraction is a problem
|
// len() is unsigned, so if len() == 0, subtraction is a problem
|
||||||
// depth can legally be 2^32. On a 32 bit system, adding may overflow
|
// depth can legally be 2^32. On a 32 bit system, adding may overflow
|
||||||
|
@ -141,7 +141,7 @@ impl<T> StackWithLimit<T> {
|
||||||
/// Return mutable reference to item `depth` distance away from top
|
/// Return mutable reference to item `depth` distance away from top
|
||||||
///
|
///
|
||||||
/// Does not check whether depth is in range.
|
/// Does not check whether depth is in range.
|
||||||
pub(crate) fn get_relative_to_top_mut_unchecked(&mut self, depth: usize) -> &mut T {
|
pub(crate) fn nth_from_top_mut_unchecked(&mut self, depth: usize) -> &mut T {
|
||||||
let offset = self.stack.len() - 1 - depth;
|
let offset = self.stack.len() - 1 - depth;
|
||||||
&mut self.stack[offset]
|
&mut self.stack[offset]
|
||||||
}
|
}
|
||||||
|
@ -333,16 +333,16 @@ mod test {
|
||||||
use core::usize;
|
use core::usize;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn get_relative_to_top() {
|
fn nth_from_top() {
|
||||||
let mut bstack = StackWithLimit::<i32>::with_size(StackSize::from_element_count(2));
|
let mut bstack = StackWithLimit::<i32>::with_size(StackSize::from_element_count(2));
|
||||||
assert_eq!(bstack.get_relative_to_top(0), None);
|
assert_eq!(bstack.nth_from_top(0), None);
|
||||||
bstack.push(1).unwrap();
|
bstack.push(1).unwrap();
|
||||||
bstack.push(2).unwrap();
|
bstack.push(2).unwrap();
|
||||||
bstack.push(3).unwrap_err();
|
bstack.push(3).unwrap_err();
|
||||||
assert_eq!(bstack.get_relative_to_top(0), Some(&2));
|
assert_eq!(bstack.nth_from_top(0), Some(&2));
|
||||||
assert_eq!(bstack.get_relative_to_top(1), Some(&1));
|
assert_eq!(bstack.nth_from_top(1), Some(&1));
|
||||||
assert_eq!(bstack.get_relative_to_top(2), None);
|
assert_eq!(bstack.nth_from_top(2), None);
|
||||||
assert_eq!(bstack.get_relative_to_top(3), None);
|
assert_eq!(bstack.nth_from_top(3), None);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn exersize(mut bstack: StackWithLimit<i32>) {
|
fn exersize(mut bstack: StackWithLimit<i32>) {
|
||||||
|
|
|
@ -1365,7 +1365,7 @@ impl ValueStack {
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn pick_mut(&mut self, depth: usize) -> &mut RuntimeValueInternal {
|
fn pick_mut(&mut self, depth: usize) -> &mut RuntimeValueInternal {
|
||||||
self.0.get_relative_to_top_mut_unchecked(depth - 1)
|
self.0.nth_from_top_mut_unchecked(depth - 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -1487,7 +1487,7 @@ fn top_label(frame_stack: &StackWithLimit<BlockFrame>) -> &BlockFrame {
|
||||||
|
|
||||||
fn require_label(depth: u32, frame_stack: &StackWithLimit<BlockFrame>) -> Result<&BlockFrame, Error> {
|
fn require_label(depth: u32, frame_stack: &StackWithLimit<BlockFrame>) -> Result<&BlockFrame, Error> {
|
||||||
frame_stack
|
frame_stack
|
||||||
.get_relative_to_top(depth as usize)
|
.nth_from_top(depth as usize)
|
||||||
.ok_or_else(|| Error("non-empty stack expected".into()))
|
.ok_or_else(|| Error("non-empty stack expected".into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue