Refactoring ReaderUtil trait, combining it with the traitless impl on Reader.

This commit is contained in:
Eric Holk
2012-09-25 13:16:43 -04:00
committed by Brian Anderson
parent f41cf208b7
commit 135ebca8aa
5 changed files with 17 additions and 6 deletions

View File

@@ -48,6 +48,17 @@ trait Reader {
trait ReaderUtil {
fn read_bytes(len: uint) -> ~[u8];
fn read_line() -> ~str;
fn read_chars(n: uint) -> ~[char];
fn read_char() -> char;
fn read_c_str() -> ~str;
fn read_le_uint(size: uint) -> uint;
fn read_le_int(size: uint) -> int;
fn read_be_uint(size: uint) -> uint;
fn read_whole_stream() -> ~[u8];
fn each_byte(it: fn(int) -> bool);
fn each_char(it: fn(char) -> bool);
fn each_line(it: fn((&str)) -> bool);
}
impl<T: Reader> T : ReaderUtil {
@@ -69,12 +80,10 @@ impl<T: Reader> T : ReaderUtil {
}
str::from_bytes(buf)
}
}
impl Reader {
fn read_chars(n: uint) -> ~[char] {
// returns the (consumed offset, n_req), appends characters to &chars
fn chars_from_bytes(buf: &~[u8], chars: &mut ~[char])
fn chars_from_bytes<T: Reader>(buf: &~[u8], chars: &mut ~[char])
-> (uint, uint) {
let mut i = 0;
let buf_len = buf.len();
@@ -120,7 +129,7 @@ impl Reader {
break;
}
vec::push_all(buf, data);
let (offset, nbreq) = chars_from_bytes(&buf, &mut chars);
let (offset, nbreq) = chars_from_bytes::<T>(&buf, &mut chars);
let ncreq = n - chars.len();
// again we either know we need a certain number of bytes
// to complete a character, or we make sure we don't