1
- //! Bytes implementations for heapless types
1
+ //! Implementations of `bytes` traits for ` heapless` types.
2
2
3
- use crate :: Vec ;
4
- use bytes:: { buf:: UninitSlice , Buf , BufMut } ;
3
+ use crate :: {
4
+ len_type:: LenType ,
5
+ vec:: { VecInner , VecStorage } ,
6
+ } ;
7
+ use bytes:: { buf:: UninitSlice , BufMut } ;
5
8
6
- unsafe impl < const N : usize > Buf for Vec < u8 , N > {
7
- #[ inline]
8
- fn remaining ( & self ) -> usize {
9
- self . len ( )
10
- }
11
-
12
- #[ inline]
13
- fn chunk ( & mut self ) -> & [ u8 ] {
14
- self . as_slice ( )
15
- }
16
-
17
- #[ inline]
18
- unsafe fn advance ( & mut self , cnt : usize ) {
19
- assert ! (
20
- cnt <= self . remaining( ) ,
21
- "cannot advance past `remaining`: {:?} <= {:?}" ,
22
- cnt,
23
- self . remaining( ) ,
24
- ) ;
25
- unsafe {
26
- // SAFETY: We've checked that `cnt` <= `self.remaining()` and we know that
27
- // `self.remaining()` <= `self.cap`.
28
- self . advance_unchecked ( cnt) ;
29
- }
30
- }
31
- }
32
-
33
- unsafe impl < const N : usize > BufMut for Vec < u8 , N > {
9
+ unsafe impl < S : VecStorage < u8 > + ?Sized , LenT : LenType > BufMut for VecInner < u8 , LenT , S > {
34
10
#[ inline]
35
11
fn remaining_mut ( & self ) -> usize {
36
- N - self . len ( )
12
+ self . capacity ( ) - self . len ( )
37
13
}
38
14
39
15
#[ inline]
40
16
unsafe fn advance_mut ( & mut self , cnt : usize ) {
41
17
let len = self . len ( ) ;
42
18
let pos = len + cnt;
43
- if pos >= N {
19
+ if pos >= self . capacity ( ) {
44
20
panic ! ( "Advance out of range" ) ;
45
21
}
46
22
self . set_len ( pos) ;
@@ -50,56 +26,56 @@ unsafe impl<const N: usize> BufMut for Vec<u8, N> {
50
26
fn chunk_mut ( & mut self ) -> & mut UninitSlice {
51
27
let len = self . len ( ) ;
52
28
let ptr = self . as_mut_ptr ( ) ;
53
- unsafe { & mut UninitSlice :: from_raw_parts_mut ( ptr, N ) [ len..] }
29
+ unsafe { & mut UninitSlice :: from_raw_parts_mut ( ptr, self . capacity ( ) ) [ len..] }
54
30
}
55
31
}
56
32
57
33
#[ cfg( test) ]
58
34
mod tests {
59
- use crate :: Vec ;
35
+ use crate :: { Vec , VecView } ;
60
36
use bytes:: BufMut ;
61
37
62
38
#[ test]
63
39
#[ should_panic]
64
- fn buf_advance_out_of_bounds ( ) {
40
+ fn buf_mut_advance_mut_out_of_bounds ( ) {
65
41
let mut vec: Vec < u8 , 8 > = Vec :: new ( ) ;
66
- vec. advance ( 9 )
42
+ unsafe { vec. advance_mut ( 9 ) } ;
67
43
}
68
44
69
45
#[ test]
70
- fn buf_remaining ( ) {
46
+ fn buf_mut_remaining_mut ( ) {
71
47
let mut vec: Vec < u8 , 8 > = Vec :: new ( ) ;
72
- assert_eq ! ( vec. remaining ( ) , 8 ) ;
48
+ assert_eq ! ( vec. remaining_mut ( ) , 8 ) ;
73
49
vec. push ( 42 ) . unwrap ( ) ;
74
- assert_eq ! ( vec. remaining ( ) , 7 ) ;
50
+ assert_eq ! ( vec. remaining_mut ( ) , 7 ) ;
75
51
}
76
52
77
53
#[ test]
78
- fn buf_chunk ( ) {
54
+ fn buf_mut_chunk_mut ( ) {
79
55
let mut vec: Vec < u8 , 8 > = Vec :: new ( ) ;
80
- assert_eq ! ( vec. chunk ( ) . len( ) , 8 ) ;
56
+ assert_eq ! ( vec. chunk_mut ( ) . len( ) , 8 ) ;
81
57
unsafe { vec. advance_mut ( 1 ) } ;
82
- assert_eq ! ( vec. chunk ( ) . len( ) , 7 ) ;
58
+ assert_eq ! ( vec. chunk_mut ( ) . len( ) , 7 ) ;
83
59
}
84
60
85
61
#[ test]
86
62
#[ should_panic]
87
- fn buf_mut_advance_mut_out_of_bounds ( ) {
88
- let mut vec: Vec < u8 , 8 > = Vec :: new ( ) ;
63
+ fn buf_mut_advance_mut_out_of_bounds_view ( ) {
64
+ let vec: & mut VecView < u8 , u8 > = & mut Vec :: < u8 , 8 > :: new ( ) ;
89
65
unsafe { vec. advance_mut ( 9 ) } ;
90
66
}
91
67
92
68
#[ test]
93
- fn buf_mut_remaining_mut ( ) {
94
- let mut vec: Vec < u8 , 8 > = Vec :: new ( ) ;
69
+ fn buf_mut_remaining_mut_view ( ) {
70
+ let vec: & mut VecView < u8 , u8 > = & mut Vec :: < u8 , 8 > :: new ( ) ;
95
71
assert_eq ! ( vec. remaining_mut( ) , 8 ) ;
96
72
vec. push ( 42 ) . unwrap ( ) ;
97
73
assert_eq ! ( vec. remaining_mut( ) , 7 ) ;
98
74
}
99
75
100
76
#[ test]
101
- fn buf_mut_chunk_mut ( ) {
102
- let mut vec: Vec < u8 , 8 > = Vec :: new ( ) ;
77
+ fn buf_mut_chunk_mut_view ( ) {
78
+ let vec: & mut VecView < u8 , u8 > = & mut Vec :: < u8 , 8 > :: new ( ) ;
103
79
assert_eq ! ( vec. chunk_mut( ) . len( ) , 8 ) ;
104
80
unsafe { vec. advance_mut ( 1 ) } ;
105
81
assert_eq ! ( vec. chunk_mut( ) . len( ) , 7 ) ;
0 commit comments