about summary refs log tree commit diff
path: root/src/lib
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2011-04-08 16:48:17 +0200
committerMarijn Haverbeke <marijnh@gmail.com>2011-04-09 01:05:18 +0200
commit094d31f5e40d086a3f1aeb4ff7ea93f59a755d4e (patch)
tree703dec3bdbb9df9309f8d7ea198254063170237e /src/lib
parentcae703c0b1fabbc6ed3f6501198778d18a110fc2 (diff)
downloadrust-094d31f5e40d086a3f1aeb4ff7ea93f59a755d4e.tar.gz
rust-094d31f5e40d086a3f1aeb4ff7ea93f59a755d4e.zip
Make lexer buffer the whole file
This way, it won't have to go through a bunch of calls for each
byte fetched.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/io.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/lib/io.rs b/src/lib/io.rs
index 4a3274ac999..61f06795444 100644
--- a/src/lib/io.rs
+++ b/src/lib/io.rs
@@ -41,6 +41,7 @@ type reader =
           impure fn read_le_uint(uint size) -> uint;
           impure fn read_le_int(uint size) -> int;
           impure fn read_be_uint(uint size) -> uint;
+          impure fn read_whole_stream() -> vec[u8];
 
           impure fn seek(int offset, seek_style whence);
           impure fn tell() -> uint; // FIXME: eventually u64
@@ -170,6 +171,13 @@ state obj new_reader(buf_reader rdr) {
         }
         ret val;
     }
+    impure fn read_whole_stream() -> vec[u8] {
+        let vec[u8] buf = vec();
+        while (!rdr.eof()) {
+            buf += rdr.read(2048u);
+        }
+        ret buf;
+    }
     impure fn seek(int offset, seek_style whence) {
         ret rdr.seek(offset, whence);
     }