]> Repositorios git - scryer-prolog.git/commitdiff
use take() for extra fast processing of binary files
authorMarkus Triska <[email protected]>
Fri, 12 Jun 2020 19:07:18 +0000 (21:07 +0200)
committerMarkus Triska <[email protected]>
Sat, 13 Jun 2020 14:47:46 +0000 (16:47 +0200)
Suggested by @notoria in #589. Many thanks!

src/machine/system_calls.rs

index 28339acd8d8740ef3732644f62ea15b3e685b82d..e18da09b322eb7ebb53403ec8ec8895ca7cf7313 100644 (file)
@@ -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(),