1
Fork 0

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

View file

@ -8,7 +8,7 @@
use core::cmp::{Eq, Ord};
use result::{Result, Ok, Err};
use io::WriterUtil;
use io::{WriterUtil, ReaderUtil};
use map::HashMap;
use map::Map;
use sort::Sort;

View file

@ -3,7 +3,7 @@
use core::cmp::Eq;
use libc::{c_char, c_int, c_long, size_t, time_t};
use io::Reader;
use io::{Reader, ReaderUtil};
use result::{Result, Ok, Err};
export

View file

@ -1,4 +1,5 @@
use io::println;//XXXXXXXXxxx
use io::ReaderUtil;
use util::interner;
use lexer::{string_reader, bump, is_eof, nextch,
is_whitespace, get_str_from, reader};

View file

@ -12,6 +12,7 @@ use core::*;
// -*- rust -*-
use result::{Ok, Err};
use io::ReaderUtil;
use std::getopts;
use std::map::HashMap;
use getopts::{opt_present};