Skip to content

Commit c8303e8

Browse files
committed
Implement bytes traits for VecInner.
1 parent 52afb90 commit c8303e8

File tree

1 file changed

+33
-7
lines changed

1 file changed

+33
-7
lines changed

src/bytes.rs

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
1-
//! Bytes implementations for heapless types
1+
//! Implementations of `bytes` traits for `heapless` types.
22
3-
use crate::{len_type::LenType, Vec};
3+
use crate::{
4+
len_type::LenType,
5+
vec::{VecInner, VecStorage},
6+
};
47
use bytes::{buf::UninitSlice, BufMut};
58

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> {
710
#[inline]
811
fn remaining_mut(&self) -> usize {
9-
N - self.len()
12+
self.capacity() - self.len()
1013
}
1114

1215
#[inline]
1316
unsafe fn advance_mut(&mut self, cnt: usize) {
1417
let len = self.len();
1518
let pos = len + cnt;
16-
if pos >= N {
19+
if pos >= self.capacity() {
1720
panic!("Advance out of range");
1821
}
1922
self.set_len(pos);
@@ -23,13 +26,13 @@ unsafe impl<const N: usize, LenT: LenType> BufMut for Vec<u8, N, LenT> {
2326
fn chunk_mut(&mut self) -> &mut UninitSlice {
2427
let len = self.len();
2528
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..] }
2730
}
2831
}
2932

3033
#[cfg(test)]
3134
mod tests {
32-
use crate::Vec;
35+
use crate::{Vec, VecView};
3336
use bytes::BufMut;
3437

3538
#[test]
@@ -54,4 +57,27 @@ mod tests {
5457
unsafe { vec.advance_mut(1) };
5558
assert_eq!(vec.chunk_mut().len(), 7);
5659
}
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+
}
5783
}

0 commit comments

Comments
 (0)