Skip to content
Snippets Groups Projects
Commit 6b624b84 authored by Carl Lerche's avatar Carl Lerche
Browse files

Make MutBuf::advance unsafe

Closes #38
parent 01c1e05a
No related branches found
No related tags found
No related merge requests found
...@@ -329,7 +329,7 @@ impl MutBuf for MutByteBuf { ...@@ -329,7 +329,7 @@ impl MutBuf for MutByteBuf {
self.buf.remaining() self.buf.remaining()
} }
fn advance(&mut self, cnt: usize) { unsafe fn advance(&mut self, cnt: usize) {
self.buf.advance(cnt) self.buf.advance(cnt)
} }
......
...@@ -95,7 +95,7 @@ pub trait MutBuf : Sized { ...@@ -95,7 +95,7 @@ pub trait MutBuf : Sized {
fn remaining(&self) -> usize; fn remaining(&self) -> usize;
/// Advance the internal cursor of the MutBuf /// 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 /// Returns true iff there is any more space for bytes to be written
fn has_remaining(&self) -> bool { fn has_remaining(&self) -> bool {
...@@ -143,9 +143,10 @@ pub trait MutBuf : Sized { ...@@ -143,9 +143,10 @@ pub trait MutBuf : Sized {
cnt); cnt);
off += cnt; off += cnt;
} }
self.advance(cnt); unsafe { self.advance(cnt); }
} }
len len
...@@ -278,7 +279,7 @@ impl<'a, R: io::Read+'a> Source for &'a mut R { ...@@ -278,7 +279,7 @@ impl<'a, R: io::Read+'a> Source for &'a mut R {
break; break;
} }
buf.advance(i); unsafe { buf.advance(i); }
cnt += i; cnt += i;
} }
...@@ -338,7 +339,7 @@ impl MutBuf for Vec<u8> { ...@@ -338,7 +339,7 @@ impl MutBuf for Vec<u8> {
usize::MAX - self.len() usize::MAX - self.len()
} }
fn advance(&mut self, cnt: usize) { unsafe fn advance(&mut self, cnt: usize) {
let len = self.len() + cnt; let len = self.len() + cnt;
if len > self.capacity() { if len > self.capacity() {
...@@ -348,9 +349,7 @@ impl MutBuf for Vec<u8> { ...@@ -348,9 +349,7 @@ impl MutBuf for Vec<u8> {
self.reserve(cap - len); self.reserve(cap - len);
} }
unsafe { self.set_len(len);
self.set_len(len);
}
} }
unsafe fn mut_bytes(&mut self) -> &mut [u8] { unsafe fn mut_bytes(&mut self) -> &mut [u8] {
......
...@@ -199,7 +199,7 @@ impl MutBuf for RingBuf { ...@@ -199,7 +199,7 @@ impl MutBuf for RingBuf {
self.write_remaining() self.write_remaining()
} }
fn advance(&mut self, cnt: usize) { unsafe fn advance(&mut self, cnt: usize) {
self.advance_writer(cnt) self.advance_writer(cnt)
} }
......
...@@ -48,7 +48,7 @@ impl<'a> MutBuf for MutSliceBuf<'a> { ...@@ -48,7 +48,7 @@ impl<'a> MutBuf for MutSliceBuf<'a> {
self.bytes.len() - self.pos 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()); cnt = cmp::min(cnt, self.remaining());
self.pos += cnt; self.pos += cnt;
} }
......
...@@ -71,7 +71,7 @@ impl<T: MutBuf> MutBuf for Take<T> { ...@@ -71,7 +71,7 @@ impl<T: MutBuf> MutBuf for Take<T> {
&mut self.inner.mut_bytes()[..self.limit] &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); let cnt = cmp::min(cnt, self.limit);
self.limit -= cnt; self.limit -= cnt;
self.inner.advance(cnt); self.inner.advance(cnt);
......
...@@ -220,7 +220,7 @@ impl<'a> Source for &'a Bytes { ...@@ -220,7 +220,7 @@ impl<'a> Source for &'a Bytes {
} }
src.advance(l); src.advance(l);
dst.advance(l); unsafe { dst.advance(l); }
res += l; res += l;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment