1
- //! Bytes implementations for heapless types
1
+ //! Implementations of `bytes` traits for ` heapless` types.
2
2
3
- use crate :: { len_type:: LenType , Vec } ;
3
+ use crate :: {
4
+ len_type:: LenType ,
5
+ vec:: { VecInner , VecStorage } ,
6
+ } ;
4
7
use bytes:: { buf:: UninitSlice , BufMut } ;
5
8
6
- unsafe impl < const N : usize , LenT : LenType > BufMut for Vec < u8 , N , LenT > {
9
+ unsafe impl < S : VecStorage < u8 > + ? Sized , LenT : LenType > BufMut for VecInner < u8 , LenT , S > {
7
10
#[ inline]
8
11
fn remaining_mut ( & self ) -> usize {
9
- N - self . len ( )
12
+ self . capacity ( ) - self . len ( )
10
13
}
11
14
12
15
#[ inline]
13
16
unsafe fn advance_mut ( & mut self , cnt : usize ) {
14
17
let len = self . len ( ) ;
15
18
let pos = len + cnt;
16
- if pos >= N {
19
+ if pos >= self . capacity ( ) {
17
20
panic ! ( "Advance out of range" ) ;
18
21
}
19
22
self . set_len ( pos) ;
@@ -23,13 +26,13 @@ unsafe impl<const N: usize, LenT: LenType> BufMut for Vec<u8, N, LenT> {
23
26
fn chunk_mut ( & mut self ) -> & mut UninitSlice {
24
27
let len = self . len ( ) ;
25
28
let ptr = self . as_mut_ptr ( ) ;
26
- unsafe { & mut UninitSlice :: from_raw_parts_mut ( ptr, N ) [ len..] }
29
+ unsafe { & mut UninitSlice :: from_raw_parts_mut ( ptr, self . capacity ( ) ) [ len..] }
27
30
}
28
31
}
29
32
30
33
#[ cfg( test) ]
31
34
mod tests {
32
- use crate :: Vec ;
35
+ use crate :: { Vec , VecView } ;
33
36
use bytes:: BufMut ;
34
37
35
38
#[ test]
@@ -54,4 +57,27 @@ mod tests {
54
57
unsafe { vec. advance_mut ( 1 ) } ;
55
58
assert_eq ! ( vec. chunk_mut( ) . len( ) , 7 ) ;
56
59
}
60
+
61
+ #[ test]
62
+ #[ should_panic]
63
+ fn buf_mut_advance_mut_out_of_bounds_view ( ) {
64
+ let vec: & mut VecView < u8 , u8 > = & mut Vec :: < u8 , 8 > :: new ( ) ;
65
+ unsafe { vec. advance_mut ( 9 ) } ;
66
+ }
67
+
68
+ #[ test]
69
+ fn buf_mut_remaining_mut_view ( ) {
70
+ let vec: & mut VecView < u8 , u8 > = & mut Vec :: < u8 , 8 > :: new ( ) ;
71
+ assert_eq ! ( vec. remaining_mut( ) , 8 ) ;
72
+ vec. push ( 42 ) . unwrap ( ) ;
73
+ assert_eq ! ( vec. remaining_mut( ) , 7 ) ;
74
+ }
75
+
76
+ #[ test]
77
+ fn buf_mut_chunk_mut_view ( ) {
78
+ let vec: & mut VecView < u8 , u8 > = & mut Vec :: < u8 , 8 > :: new ( ) ;
79
+ assert_eq ! ( vec. chunk_mut( ) . len( ) , 8 ) ;
80
+ unsafe { vec. advance_mut ( 1 ) } ;
81
+ assert_eq ! ( vec. chunk_mut( ) . len( ) , 7 ) ;
82
+ }
57
83
}
0 commit comments