copy_stack_vec/vec/array/retain.rs
1// This file is part of copy-stack-vec.
2// SPDX-License-Identifier: MIT OR Apache-2.0
3
4// Crate import
5use crate::vec::CopyStackVec;
6
7impl<T: Copy, const N: usize> CopyStackVec<T, N> {
8 /// Retains only the elements specified by the predicate `f`, preserving order.
9 ///
10 /// The predicate is applied to each element in iteration order.
11 #[inline]
12 pub fn retain<F: FnMut(&T) -> bool>(&mut self, mut f: F) {
13 let mut write = 0;
14 for read in 0..self.len {
15 if f(&self.buf[read]) {
16 if write != read {
17 self.buf[write] = self.buf[read];
18 }
19 write += 1;
20 }
21 }
22 self.len = write;
23 }
24}