1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use super::len::Len;
use std::mem;
pub trait Skip: Len {
#[inline(always)]
fn skip(&mut self, len: usize) {
assert!(len <= self.len());
unsafe { self.skip_unchecked(len) }
}
unsafe fn skip_unchecked(&mut self, len: usize);
}
impl Skip for &[u8] {
#[inline(always)]
unsafe fn skip_unchecked(&mut self, len: usize) {
debug_assert!(len <= self.len());
*self = self.get_unchecked(len..);
}
}
impl Skip for &mut [u8] {
#[inline(always)]
unsafe fn skip_unchecked(&mut self, len: usize) {
debug_assert!(len <= self.len());
*self = mem::take(self).get_unchecked_mut(len..);
}
}
impl<T: Skip + ?Sized> Skip for &mut T {
#[inline(always)]
fn skip(&mut self, len: usize) {
(**self).skip(len)
}
#[inline(always)]
unsafe fn skip_unchecked(&mut self, len: usize) {
(**self).skip_unchecked(len)
}
}