From e3b1471acdfe6121a8e0f657d8caa27393703253 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Thu, 18 Oct 2012 09:06:53 -0700 Subject: [PATCH] Rewrite io::ByteBuf into a struct --- src/libcore/io.rs | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/libcore/io.rs b/src/libcore/io.rs index 41fc1bb1a69..676883394af 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -297,39 +297,41 @@ pub fn file_reader(path: &Path) -> Result { } -// Byte buffer readers +// Byte readers +pub struct BytesReader { + bytes: &[u8], + mut pos: uint +} -pub type ByteBuf = {buf: &[const u8], mut pos: uint}; +impl BytesReader: Reader { + fn read(bytes: &[mut u8], len: uint) -> uint { + let count = uint::min(len, self.bytes.len() - self.pos); -impl ByteBuf: Reader { - fn read(buf: &[mut u8], len: uint) -> uint { - let count = uint::min(len, self.buf.len() - self.pos); - - let view = vec::const_view(self.buf, self.pos, self.buf.len()); - vec::bytes::memcpy(buf, view, count); + let view = vec::view(self.bytes, self.pos, self.bytes.len()); + vec::bytes::memcpy(bytes, view, count); self.pos += count; count } fn read_byte() -> int { - if self.pos == self.buf.len() { return -1; } - let b = self.buf[self.pos]; + if self.pos == self.bytes.len() { return -1; } + let b = self.bytes[self.pos]; self.pos += 1u; return b as int; } // FIXME (#2738): implement this fn unread_byte(_byte: int) { error!("Unimplemented: unread_byte"); fail; } - fn eof() -> bool { self.pos == self.buf.len() } + fn eof() -> bool { self.pos == self.bytes.len() } fn seek(offset: int, whence: SeekStyle) { let pos = self.pos; - self.pos = seek_in_buf(offset, pos, self.buf.len(), whence); + self.pos = seek_in_buf(offset, pos, self.bytes.len(), whence); } fn tell() -> uint { self.pos } } pub pure fn with_bytes_reader(bytes: &[u8], f: fn(Reader) -> t) -> t { - f({buf: bytes, mut pos: 0u} as Reader) + f(BytesReader { bytes: bytes, pos: 0u } as Reader) } pub fn with_str_reader(s: &str, f: fn(Reader) -> T) -> T {