1- //! Bytes implementations for heapless types
1+ //! Implementations of `bytes` traits for ` heapless` types.
22
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 } ;
58
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 > {
3410 #[ inline]
3511 fn remaining_mut ( & self ) -> usize {
36- N - self . len ( )
12+ self . capacity ( ) - self . len ( )
3713 }
3814
3915 #[ inline]
4016 unsafe fn advance_mut ( & mut self , cnt : usize ) {
4117 let len = self . len ( ) ;
4218 let pos = len + cnt;
43- if pos >= N {
19+ if pos >= self . capacity ( ) {
4420 panic ! ( "Advance out of range" ) ;
4521 }
4622 self . set_len ( pos) ;
@@ -50,56 +26,56 @@ unsafe impl<const N: usize> BufMut for Vec<u8, N> {
5026 fn chunk_mut ( & mut self ) -> & mut UninitSlice {
5127 let len = self . len ( ) ;
5228 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..] }
5430 }
5531}
5632
5733#[ cfg( test) ]
5834mod tests {
59- use crate :: Vec ;
35+ use crate :: { Vec , VecView } ;
6036 use bytes:: BufMut ;
6137
6238 #[ test]
6339 #[ should_panic]
64- fn buf_advance_out_of_bounds ( ) {
40+ fn buf_mut_advance_mut_out_of_bounds ( ) {
6541 let mut vec: Vec < u8 , 8 > = Vec :: new ( ) ;
66- vec. advance ( 9 )
42+ unsafe { vec. advance_mut ( 9 ) } ;
6743 }
6844
6945 #[ test]
70- fn buf_remaining ( ) {
46+ fn buf_mut_remaining_mut ( ) {
7147 let mut vec: Vec < u8 , 8 > = Vec :: new ( ) ;
72- assert_eq ! ( vec. remaining ( ) , 8 ) ;
48+ assert_eq ! ( vec. remaining_mut ( ) , 8 ) ;
7349 vec. push ( 42 ) . unwrap ( ) ;
74- assert_eq ! ( vec. remaining ( ) , 7 ) ;
50+ assert_eq ! ( vec. remaining_mut ( ) , 7 ) ;
7551 }
7652
7753 #[ test]
78- fn buf_chunk ( ) {
54+ fn buf_mut_chunk_mut ( ) {
7955 let mut vec: Vec < u8 , 8 > = Vec :: new ( ) ;
80- assert_eq ! ( vec. chunk ( ) . len( ) , 8 ) ;
56+ assert_eq ! ( vec. chunk_mut ( ) . len( ) , 8 ) ;
8157 unsafe { vec. advance_mut ( 1 ) } ;
82- assert_eq ! ( vec. chunk ( ) . len( ) , 7 ) ;
58+ assert_eq ! ( vec. chunk_mut ( ) . len( ) , 7 ) ;
8359 }
8460
8561 #[ test]
8662 #[ 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 ( ) ;
8965 unsafe { vec. advance_mut ( 9 ) } ;
9066 }
9167
9268 #[ 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 ( ) ;
9571 assert_eq ! ( vec. remaining_mut( ) , 8 ) ;
9672 vec. push ( 42 ) . unwrap ( ) ;
9773 assert_eq ! ( vec. remaining_mut( ) , 7 ) ;
9874 }
9975
10076 #[ 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 ( ) ;
10379 assert_eq ! ( vec. chunk_mut( ) . len( ) , 8 ) ;
10480 unsafe { vec. advance_mut ( 1 ) } ;
10581 assert_eq ! ( vec. chunk_mut( ) . len( ) , 7 ) ;
0 commit comments