Merge pull request #229 from japaric/symmetric_vec_interface

Made pop_unchecked public, added is_empty
This commit is contained in:
Emil Fresk 2021-08-16 14:14:32 +02:00 committed by GitHub
commit c82478f78b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -236,8 +236,8 @@ impl<T, const N: usize> Vec<T, N> {
/// # 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<T, const N: usize> Vec<T, N> {
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<i32, 4> = Vec::new();
}
#[test]
fn is_full_empty() {
let mut v: Vec<i32, 4> = 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;