1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-30 12:37:49 +00:00

Small performance enhancements

Get rid of half filled heuristic and use unsafe array indexing because
the indices should always be correct.
This commit is contained in:
polyphemus 2014-07-10 20:58:11 +02:00
parent f06d9fe130
commit 67a163184d

View file

@ -35,9 +35,9 @@ impl<R: Reader> BufReader<R> {
} }
} }
#[inline]
fn read(&mut self) -> IoResult<uint> { fn read(&mut self) -> IoResult<uint> {
let buf_len = self.buffer.len(); let buffer_fill = self.buffer.mut_slice_from(self.end);
let buffer_fill = self.buffer.mut_slice(self.end, buf_len);
match self.reader.read(buffer_fill) { match self.reader.read(buffer_fill) {
Ok(nread) => { Ok(nread) => {
@ -53,9 +53,11 @@ impl<R: Reader> BufReader<R> {
if self.end == self.start { if self.end == self.start {
self.start = 0; self.start = 0;
self.end = 0; self.end = 0;
}
if self.end <= 2048 { self.read() } else { Ok(0) } self.read()
} else {
Ok(0)
}
} }
pub fn consume_line(&mut self) -> uint { pub fn consume_line(&mut self) -> uint {
@ -73,7 +75,8 @@ impl<R: Reader> BufReader<R> {
if buffer_used == 0 { return bytes_consumed; } if buffer_used == 0 { return bytes_consumed; }
for idx in range(self.start, self.end) { for idx in range(self.start, self.end) {
if self.buffer[idx] == b'\n' { // the indices are always correct, use unsafe for speed
if unsafe { *self.buffer.unsafe_ref(idx) } == b'\n' {
self.start = idx + 1; self.start = idx + 1;
return bytes_consumed + idx + 1; return bytes_consumed + idx + 1;
} }
@ -108,7 +111,8 @@ impl<R: Reader> Bytes::Select for BufReader<R> {
}; };
for idx in range(self.start, self.start + max_segment_len) { for idx in range(self.start, self.start + max_segment_len) {
if self.buffer[idx] == b'\n' { // the indices are always correct, use unsafe for speed
if unsafe { *self.buffer.unsafe_ref(idx) } == b'\n' {
let segment = self.buffer.slice(self.start, idx + 1); let segment = self.buffer.slice(self.start, idx + 1);
self.start = idx + 1; self.start = idx + 1;