Skip to main content

libutils_array/
references.rs

1//^
2//^ HEAD
3//^
4
5//> HEAD -> SUPER
6use super::Array;
7
8//> HEAD -> CORE
9use core::{
10    slice::{
11        from_raw_parts as fat,
12        from_raw_parts_mut as mutfat
13    },
14    borrow::{
15        Borrow,
16        BorrowMut
17    },
18    ops::{
19        Deref,
20        DerefMut
21    }
22};
23
24
25//^
26//^ REFERENCES
27//^
28
29//> REFERENCES -> DEREF
30const impl<Type, const N: usize> Deref for Array<Type, N> {
31    type Target = [Type];
32    #[inline]
33    fn deref(&self) -> &Self::Target {return unsafe {fat(self.data.as_ptr() as *const Type, self.length)}}
34}
35
36//> REFERENCES -> DEREFMUT
37const impl<Type, const N: usize> DerefMut for Array<Type, N> {
38    #[inline]
39    fn deref_mut(&mut self) -> &mut Self::Target {return unsafe {mutfat(self.pointer().as_ptr(), self.length)}}
40}
41
42//> REFERENCES -> SLICE
43const impl<Type, const N: usize> AsRef<[Type]> for Array<Type, N> {
44    #[inline]
45    fn as_ref(&self) -> &[Type] {return self.deref()}
46}
47
48//> REFERENCES -> MUTABLE SLICE
49const impl<Type, const N: usize> AsMut<[Type]> for Array<Type, N> {
50    #[inline]
51    fn as_mut(&mut self) -> &mut [Type] {return self.deref_mut()}
52}
53
54
55//^
56//^ BORROW
57//^
58
59//> BORROW -> CONSTANT
60const impl<Type, const N: usize> Borrow<[Type]> for Array<Type, N> {
61    #[inline]
62    fn borrow(&self) -> &[Type] {self.as_ref()}
63}
64
65//> BORROW -> MUTABLE
66const impl<Type, const N: usize> BorrowMut<[Type]> for Array<Type, N> {
67    #[inline]
68    fn borrow_mut(&mut self) -> &mut [Type] {self.as_mut()}
69}