cds/arrayvec/traits/
borrow.rs1use 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}