From 6b624b849ab422840a3e87e8e8e7eac171df67d0 Mon Sep 17 00:00:00 2001 From: Carl Lerche <me@carllerche.com> Date: Thu, 3 Dec 2015 19:57:08 -0800 Subject: [PATCH] Make MutBuf::advance unsafe Closes #38 --- src/buf/byte.rs | 2 +- src/buf/mod.rs | 13 ++++++------- src/buf/ring.rs | 2 +- src/buf/slice.rs | 2 +- src/buf/take.rs | 2 +- src/str/bytes.rs | 2 +- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/buf/byte.rs b/src/buf/byte.rs index bf1e14a..46c2e6d 100644 --- a/src/buf/byte.rs +++ b/src/buf/byte.rs @@ -329,7 +329,7 @@ impl MutBuf for MutByteBuf { self.buf.remaining() } - fn advance(&mut self, cnt: usize) { + unsafe fn advance(&mut self, cnt: usize) { self.buf.advance(cnt) } diff --git a/src/buf/mod.rs b/src/buf/mod.rs index a1539f4..9acb915 100644 --- a/src/buf/mod.rs +++ b/src/buf/mod.rs @@ -95,7 +95,7 @@ pub trait MutBuf : Sized { fn remaining(&self) -> usize; /// Advance the internal cursor of the MutBuf - fn advance(&mut self, cnt: usize); + unsafe fn advance(&mut self, cnt: usize); /// Returns true iff there is any more space for bytes to be written fn has_remaining(&self) -> bool { @@ -143,9 +143,10 @@ pub trait MutBuf : Sized { cnt); off += cnt; + } - self.advance(cnt); + unsafe { self.advance(cnt); } } len @@ -278,7 +279,7 @@ impl<'a, R: io::Read+'a> Source for &'a mut R { break; } - buf.advance(i); + unsafe { buf.advance(i); } cnt += i; } @@ -338,7 +339,7 @@ impl MutBuf for Vec<u8> { usize::MAX - self.len() } - fn advance(&mut self, cnt: usize) { + unsafe fn advance(&mut self, cnt: usize) { let len = self.len() + cnt; if len > self.capacity() { @@ -348,9 +349,7 @@ impl MutBuf for Vec<u8> { self.reserve(cap - len); } - unsafe { - self.set_len(len); - } + self.set_len(len); } unsafe fn mut_bytes(&mut self) -> &mut [u8] { diff --git a/src/buf/ring.rs b/src/buf/ring.rs index 892b1ab..7308095 100644 --- a/src/buf/ring.rs +++ b/src/buf/ring.rs @@ -199,7 +199,7 @@ impl MutBuf for RingBuf { self.write_remaining() } - fn advance(&mut self, cnt: usize) { + unsafe fn advance(&mut self, cnt: usize) { self.advance_writer(cnt) } diff --git a/src/buf/slice.rs b/src/buf/slice.rs index fb117ff..a526803 100644 --- a/src/buf/slice.rs +++ b/src/buf/slice.rs @@ -48,7 +48,7 @@ impl<'a> MutBuf for MutSliceBuf<'a> { self.bytes.len() - self.pos } - fn advance(&mut self, mut cnt: usize) { + unsafe fn advance(&mut self, mut cnt: usize) { cnt = cmp::min(cnt, self.remaining()); self.pos += cnt; } diff --git a/src/buf/take.rs b/src/buf/take.rs index edc7237..7fec5b9 100644 --- a/src/buf/take.rs +++ b/src/buf/take.rs @@ -71,7 +71,7 @@ impl<T: MutBuf> MutBuf for Take<T> { &mut self.inner.mut_bytes()[..self.limit] } - fn advance(&mut self, cnt: usize) { + unsafe fn advance(&mut self, cnt: usize) { let cnt = cmp::min(cnt, self.limit); self.limit -= cnt; self.inner.advance(cnt); diff --git a/src/str/bytes.rs b/src/str/bytes.rs index 42e1756..d5bf409 100644 --- a/src/str/bytes.rs +++ b/src/str/bytes.rs @@ -220,7 +220,7 @@ impl<'a> Source for &'a Bytes { } src.advance(l); - dst.advance(l); + unsafe { dst.advance(l); } res += l; } -- GitLab