]> git.lizzy.rs Git - rust.git/commitdiff
libcore: Add read_until to ReaderUtil.
authorLuqman Aden <me@luqman.ca>
Sun, 3 Mar 2013 10:03:30 +0000 (02:03 -0800)
committerLuqman Aden <me@luqman.ca>
Sun, 3 Mar 2013 10:03:30 +0000 (02:03 -0800)
src/libcore/io.rs

index 4f9b8ccf7576cea0cecb298401b0b76ea753dc0a..7bf475289c3de4507275fd7117f7a00ae5ca5704 100644 (file)
@@ -78,6 +78,9 @@ pub trait ReaderUtil {
     /// Read len bytes into a new vec.
     fn read_bytes(&self, len: uint) -> ~[u8];
 
+    /// Read up until a specified character (which is not returned) or EOF.
+    fn read_until(&self, c: char) -> ~str;
+
     /// Read up until the first '\n' char (which is not returned), or EOF.
     fn read_line(&self) -> ~str;
 
@@ -181,16 +184,22 @@ fn read_bytes(&self,len: uint) -> ~[u8] {
         bytes
     }
 
-    fn read_line(&self) -> ~str {
+    fn read_until(&self, c: char) -> ~str {
         let mut bytes = ~[];
         loop {
             let ch = self.read_byte();
-            if ch == -1 || ch == 10 { break; }
+            if ch == -1 || ch == c as int {
+                break;
+            }
             bytes.push(ch as u8);
         }
         str::from_bytes(bytes)
     }
 
+    fn read_line(&self) -> ~str {
+        self.read_until('\n')
+    }
+
     fn read_chars(&self, n: uint) -> ~[char] {
         // returns the (consumed offset, n_req), appends characters to &chars
         fn chars_from_bytes<T:Reader>(bytes: &~[u8], chars: &mut ~[char])
@@ -262,12 +271,7 @@ fn read_char(&self) -> char {
     }
 
     fn read_c_str(&self) -> ~str {
-        let mut bytes: ~[u8] = ~[];
-        loop {
-            let ch = self.read_byte();
-            if ch < 1 { break; } else { bytes.push(ch as u8); }
-        }
-        str::from_bytes(bytes)
+        self.read_until(0 as char)
     }
 
     fn read_whole_stream(&self) -> ~[u8] {