cds/arrayvec/traits/
borrow.rs

1use crate::{arrayvec::ArrayVec, len::LengthType, mem::SpareMemoryPolicy};
2use core::borrow::{Borrow, BorrowMut};
3
4impl<T, L, SM, const C: usize> Borrow<[T]> for ArrayVec<T, C, L, SM>
5where
6    L: LengthType,
7    SM: SpareMemoryPolicy<T>,
8{
9    #[inline]
10    fn borrow(&self) -> &[T] {
11        self.as_slice()
12    }
13}
14
15impl<T, L, SM, const C: usize> BorrowMut<[T]> for ArrayVec<T, C, L, SM>
16where
17    L: LengthType,
18    SM: SpareMemoryPolicy<T>,
19{
20    #[inline]
21    fn borrow_mut(&mut self) -> &mut [T] {
22        self.as_mut_slice()
23    }
24}
25
26#[cfg(test)]
27mod testing {
28    use super::*;
29    use crate as cds;
30    use crate::array_vec;
31
32    #[test]
33    fn test_borrow() {
34        let a = array_vec![3; u64; 1, 2, 3];
35        let a_s: &[u64] = a.borrow();
36        assert_eq!(a_s, &[1, 2, 3]);
37        assert_eq!(a_s.as_ptr(), a.as_ptr())
38    }
39
40    #[test]
41    fn test_borrow_mut() {
42        let mut a = array_vec![3; u64; 3, 2, 1];
43        let a_s: &mut [u64] = a.borrow_mut();
44        assert_eq!(a_s, &[3, 2, 1]);
45        assert_eq!(a_s.as_mut_ptr(), a.as_mut_ptr());
46    }
47}