From dadf5bf76fb95d9796fc5300af81085dd0158f30 Mon Sep 17 00:00:00 2001 From: Emil Fresk Date: Mon, 16 Aug 2021 12:23:38 +0200 Subject: [PATCH] Made pop_unchecked public, added is_empty --- src/vec.rs | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/vec.rs b/src/vec.rs index 7ff53c11..8c9944f0 100644 --- a/src/vec.rs +++ b/src/vec.rs @@ -236,8 +236,8 @@ impl Vec { /// # Safety /// /// This assumes the vec to have at least one element. - pub(crate) unsafe fn pop_unchecked(&mut self) -> T { - debug_assert!(!self.as_slice().is_empty()); + pub unsafe fn pop_unchecked(&mut self) -> T { + debug_assert!(!self.is_empty()); self.len -= 1; (self.buffer.get_unchecked_mut(self.len).as_ptr() as *const T).read() @@ -481,6 +481,12 @@ impl Vec { self.len == self.capacity() } + /// Returns true if the vec is empty + #[inline] + pub fn is_empty(&self) -> bool { + self.len == 0 + } + /// Returns `true` if `needle` is a prefix of the Vec. /// /// Always returns `true` if `needle` is an empty slice. @@ -849,6 +855,30 @@ mod tests { let mut _v: Vec = Vec::new(); } + #[test] + fn is_full_empty() { + let mut v: Vec = Vec::new(); + + assert!(v.is_empty()); + assert!(!v.is_full()); + + v.push(1).unwrap(); + assert!(!v.is_empty()); + assert!(!v.is_full()); + + v.push(1).unwrap(); + assert!(!v.is_empty()); + assert!(!v.is_full()); + + v.push(1).unwrap(); + assert!(!v.is_empty()); + assert!(!v.is_full()); + + v.push(1).unwrap(); + assert!(!v.is_empty()); + assert!(v.is_full()); + } + macro_rules! droppable { () => { struct Droppable;