copy_stack_vec/vec/array/
push.rs

1// This file is part of copy-stack-vec.
2// SPDX-License-Identifier: MIT OR Apache-2.0
3
4// Crate imports
5use crate::{error::Error, vec::CopyStackVec};
6
7impl<T: Copy, const N: usize> CopyStackVec<T, N> {
8    /// Pushes `v` if not full; returns [`Error::Full`] otherwise.
9    #[inline]
10    pub fn push(&mut self, v: T) -> Result<(), Error> {
11        if self.len == N {
12            return Err(Error::Full);
13        }
14        self.buf[self.len] = v;
15        self.len += 1;
16        Ok(())
17    }
18
19    /// Pushes `v` if not full; if at capacity, no-op and returns `false`.
20    #[inline]
21    #[must_use]
22    pub fn push_truncated(&mut self, v: T) -> bool {
23        if self.len == N {
24            return false;
25        }
26        self.buf[self.len] = v;
27        self.len += 1;
28        true
29    }
30}