Use BytesMut instead of Vec<u8> in bytes_buf (extend is probably faster)
continuous-integration/drone/push Build was killed Details
continuous-integration/drone/pr Build was killed Details

This commit is contained in:
Alex 2022-09-13 11:31:19 +02:00
parent f022a77f97
commit 2305c2cf03
Signed by: lx
GPG Key ID: 0E496D15096376BE
2 changed files with 10 additions and 9 deletions

View File

@ -1,5 +1,7 @@
use std::collections::VecDeque;
use bytes::BytesMut;
pub use bytes::Bytes;
/// A circular buffer of bytes, internally represented as a list of Bytes
@ -48,13 +50,13 @@ impl BytesBuf {
self.buf_len = 0;
self.buf.pop_back().unwrap()
} else {
let mut ret = Vec::with_capacity(self.buf_len);
let mut ret = BytesMut::with_capacity(self.buf_len);
for b in self.buf.iter() {
ret.extend(&b[..]);
ret.extend_from_slice(&b[..]);
}
self.buf.clear();
self.buf_len = 0;
Bytes::from(ret)
ret.freeze()
}
}
@ -88,23 +90,23 @@ impl BytesBuf {
self.buf_len -= len;
front
} else {
let mut ret = Vec::with_capacity(len);
ret.extend(&front[..]);
let mut ret = BytesMut::with_capacity(len);
ret.extend_from_slice(&front[..]);
self.buf_len -= front.len();
while ret.len() < len {
let front = self.buf.pop_front().unwrap();
if front.len() > len - ret.len() {
let take = len - ret.len();
ret.extend(front.slice(..take));
ret.extend_from_slice(&front[..take]);
self.buf.push_front(front.slice(take..));
self.buf_len -= take;
break;
} else {
ret.extend(&front[..]);
ret.extend_from_slice(&front[..]);
self.buf_len -= front.len();
}
}
Bytes::from(ret)
ret.freeze()
}
}

View File

@ -52,7 +52,6 @@ pub struct OrderTag(pub(crate) u64, pub(crate) u64);
#[derive(Clone, Copy)]
pub struct OrderTagStream(u64);
impl OrderTag {
/// Create a new stream from which to generate order tags. Example:
/// ```