mirror of
https://github.com/tokio-rs/bytes.git
synced 2026-08-10 00:00:09 +02:00
58 lines
1.1 KiB
Rust
58 lines
1.1 KiB
Rust
use std::cmp;
|
|
use {Buf, MutBuf};
|
|
|
|
pub struct SliceBuf<'a> {
|
|
bytes: &'a [u8],
|
|
pos: usize
|
|
}
|
|
|
|
impl<'a> SliceBuf<'a> {
|
|
pub fn wrap(bytes: &'a [u8]) -> SliceBuf<'a> {
|
|
SliceBuf { bytes: bytes, pos: 0 }
|
|
}
|
|
}
|
|
|
|
impl<'a> Buf for SliceBuf<'a> {
|
|
fn remaining(&self) -> usize {
|
|
self.bytes.len() - self.pos
|
|
}
|
|
|
|
fn bytes<'b>(&'b self) -> &'b [u8] {
|
|
&self.bytes[self.pos..]
|
|
}
|
|
|
|
fn advance(&mut self, mut cnt: usize) {
|
|
cnt = cmp::min(cnt, self.remaining());
|
|
self.pos += cnt;
|
|
}
|
|
}
|
|
|
|
pub struct MutSliceBuf<'a> {
|
|
bytes: &'a mut [u8],
|
|
pos: usize
|
|
}
|
|
|
|
impl<'a> MutSliceBuf<'a> {
|
|
pub fn wrap(bytes: &'a mut [u8]) -> MutSliceBuf<'a> {
|
|
MutSliceBuf {
|
|
bytes: bytes,
|
|
pos: 0
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<'a> MutBuf for MutSliceBuf<'a> {
|
|
fn remaining(&self) -> usize {
|
|
self.bytes.len() - self.pos
|
|
}
|
|
|
|
fn advance(&mut self, mut cnt: usize) {
|
|
cnt = cmp::min(cnt, self.remaining());
|
|
self.pos += cnt;
|
|
}
|
|
|
|
fn mut_bytes<'b>(&'b mut self) -> &'b mut [u8] {
|
|
&mut self.bytes[self.pos..]
|
|
}
|
|
}
|