From: Markus Triska Date: Fri, 12 Jun 2020 19:07:18 +0000 (+0200) Subject: use take() for extra fast processing of binary files X-Git-Tag: v0.8.127~34^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=f910e013a6aa65d3138fae3a585cdaab322e1fae;p=scryer-prolog.git use take() for extra fast processing of binary files Suggested by @notoria in #589. Many thanks! --- diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index 28339acd..e18da09b 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -2277,18 +2277,11 @@ impl MachineState { let mut string = String::new(); if stream.options.stream_type == StreamType::Binary { - let mut mstream = stream.clone(); - for _ in 0..num { - let mut b = [0u8; 1]; - - match mstream.read(&mut b) { - Ok(1) => { - string.push(b[0] as char); - } - _ => { - break; - } - } + let mut buf = vec![]; + let mut chunk = stream.take(num as u64); + chunk.read_to_end(&mut buf).ok(); + for c in buf { + string.push(c as char); } } else { let mut iter = self.open_parsing_stream(stream.clone(),