From ff2a6a6fce175c3cc1f50054848405a703ae9478 Mon Sep 17 00:00:00 2001 From: Lucas Bajolet Date: Fri, 2 May 2014 15:00:51 -0400 Subject: [PATCH] lib/standard/stream: Changed implementation of read to better respect its documentation Signed-off-by: Lucas Bajolet --- lib/standard/stream.nit | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/lib/standard/stream.nit b/lib/standard/stream.nit index 29501ee..507ba8d 100644 --- a/lib/standard/stream.nit +++ b/lib/standard/stream.nit @@ -155,24 +155,20 @@ abstract class BufferedIStream redef fun read(i) do - var s = new FlatBuffer.with_capacity(i) - var j = _buffer_pos - var k = _buffer.length - while i > 0 do - if j >= k then + if _buffer.length == _buffer_pos then + if not eof then fill_buffer - if eof then return s.to_s - j = _buffer_pos - k = _buffer.length - end - while j < k and i > 0 do - s.add(_buffer.chars[j]) - j += 1 - i -= 1 + return read(i) end + return "" end - _buffer_pos = j - return s.to_s + if _buffer_pos + i >= _buffer.length then + var from = _buffer_pos + _buffer_pos = _buffer.length + return _buffer.substring_from(from).to_s + end + _buffer_pos += i + return _buffer.substring(_buffer_pos - i, i).to_s end redef fun read_all -- 1.7.9.5