From accc8a460da86f25689e3e8f7eb8dae0d711435e Mon Sep 17 00:00:00 2001 From: Carl Lerche <me@carllerche.com> Date: Fri, 3 Feb 2017 11:22:16 -0800 Subject: [PATCH] Add explicit inlines --- src/buf/byte.rs | 12 ++++++++++++ src/bytes.rs | 21 +++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/buf/byte.rs b/src/buf/byte.rs index bfc2887..314bdf6 100644 --- a/src/buf/byte.rs +++ b/src/buf/byte.rs @@ -10,11 +10,13 @@ pub struct ByteBuf { impl ByteBuf { /// Create a new `ByteBuf` with 8kb capacity + #[inline] pub fn new() -> ByteBuf { ByteBuf::with_capacity(8 * 1024) } /// Create a new `ByteBuf` with `cap` capacity + #[inline] pub fn with_capacity(cap: usize) -> ByteBuf { ByteBuf { mem: BytesMut::with_capacity(cap), @@ -23,6 +25,7 @@ impl ByteBuf { } /// Create a new `ByteBuf` backed by `bytes` + #[inline] pub fn from_bytes(bytes: BytesMut) -> ByteBuf { ByteBuf { mem: bytes, @@ -31,6 +34,7 @@ impl ByteBuf { } /// Create a new `ByteBuf` containing the given slice + #[inline] pub fn from_slice<T: AsRef<[u8]>>(bytes: T) -> ByteBuf { let mut buf = ByteBuf::with_capacity(bytes.as_ref().len()); buf.copy_from_slice(bytes.as_ref()); @@ -137,19 +141,23 @@ impl ByteBuf { } impl Buf for ByteBuf { + #[inline] fn remaining(&self) -> usize { self.len() - self.rd } + #[inline] fn bytes(&self) -> &[u8] { &self.mem[self.rd..] } + #[inline] fn advance(&mut self, cnt: usize) { assert!(cnt <= self.remaining(), "buffer overflow"); self.rd += cnt; } + #[inline] fn copy_to_slice(&mut self, dst: &mut [u8]) { assert!(self.remaining() >= dst.len()); @@ -160,20 +168,24 @@ impl Buf for ByteBuf { } impl BufMut for ByteBuf { + #[inline] fn remaining_mut(&self) -> usize { self.capacity() - self.len() } + #[inline] unsafe fn advance_mut(&mut self, cnt: usize) { let new_len = self.len() + cnt; self.mem.set_len(new_len); } + #[inline] unsafe fn bytes_mut(&mut self) -> &mut [u8] { let len = self.len(); &mut self.mem.as_raw()[len..] } + #[inline] fn copy_from_slice(&mut self, src: &[u8]) { assert!(self.remaining_mut() >= src.len()); diff --git a/src/bytes.rs b/src/bytes.rs index bcce35b..fa55c76 100644 --- a/src/bytes.rs +++ b/src/bytes.rs @@ -40,7 +40,22 @@ pub struct BytesMut { */ impl Bytes { + /// Creates a new empty `Bytes` + #[inline] + pub fn new() -> Bytes { + use std::ptr; + Bytes { + inner: BytesMut { + ptr: ptr::null_mut(), + len: 0, + cap: 0, + arc: UnsafeCell::new(None), + } + } + } + /// Creates a new `Bytes` and copy the given slice into it. + #[inline] pub fn from_slice<T: AsRef<[u8]>>(bytes: T) -> Bytes { BytesMut::from_slice(bytes).freeze() } @@ -210,32 +225,38 @@ unsafe impl Sync for Bytes {} impl BytesMut { /// Create a new `BytesMut` with the specified capacity. + #[inline] pub fn with_capacity(cap: usize) -> BytesMut { BytesMut::from(Vec::with_capacity(cap)) } /// Creates a new `BytesMut` and copy the given slice into it. + #[inline] pub fn from_slice<T: AsRef<[u8]>>(bytes: T) -> BytesMut { let buf = ByteBuf::from_slice(bytes); buf.into_inner() } /// Returns the number of bytes contained in this `BytesMut`. + /// #[inline] pub fn len(&self) -> usize { self.len } /// Returns true if the value contains no bytes + /// #[inline] pub fn is_empty(&self) -> bool { self.len() == 0 } /// Returns the total byte capacity of this `BytesMut` + /// #[inline] pub fn capacity(&self) -> usize { self.cap } /// Return an immutable handle to the bytes + /// #[inline] pub fn freeze(self) -> Bytes { Bytes { inner: self } } -- GitLab