about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2014-01-07 09:47:53 -0800
committerAlex Crichton <alex@alexcrichton.com>2014-01-09 09:27:10 -0800
commita18282c3d029c9962f861c536f630eb7a307aa8e (patch)
tree88bd8e2cb0c71065c28d15efb6711977285dee20 /src/libstd
parentdd11fe17c7cf3661905c952d8233527abbff4c11 (diff)
downloadrust-a18282c3d029c9962f861c536f630eb7a307aa8e.tar.gz
rust-a18282c3d029c9962f861c536f630eb7a307aa8e.zip
Remove eof() from io::Reader
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/io/buffered.rs33
-rw-r--r--src/libstd/io/comm_adapters.rs9
-rw-r--r--src/libstd/io/extensions.rs18
-rw-r--r--src/libstd/io/flate.rs2
-rw-r--r--src/libstd/io/fs.rs10
-rw-r--r--src/libstd/io/mem.rs12
-rw-r--r--src/libstd/io/mod.rs22
-rw-r--r--src/libstd/io/net/tcp.rs2
-rw-r--r--src/libstd/io/net/udp.rs2
-rw-r--r--src/libstd/io/net/unix.rs1
-rw-r--r--src/libstd/io/option.rs20
-rw-r--r--src/libstd/io/pipe.rs2
-rw-r--r--src/libstd/io/stdio.rs2
-rw-r--r--src/libstd/io/util.rs25
14 files changed, 18 insertions, 142 deletions
diff --git a/src/libstd/io/buffered.rs b/src/libstd/io/buffered.rs
index 96cb59ce778..d0894bef413 100644
--- a/src/libstd/io/buffered.rs
+++ b/src/libstd/io/buffered.rs
@@ -66,7 +66,8 @@ pub struct BufferedReader<R> {
     priv inner: R,
     priv buf: ~[u8],
     priv pos: uint,
-    priv cap: uint
+    priv cap: uint,
+    priv eof: bool,
 }
 
 impl<R: Reader> BufferedReader<R> {
@@ -84,7 +85,8 @@ impl<R: Reader> BufferedReader<R> {
             inner: inner,
             buf: buf,
             pos: 0,
-            cap: 0
+            cap: 0,
+            eof: false,
         }
     }
 
@@ -113,7 +115,7 @@ impl<R: Reader> Buffer for BufferedReader<R> {
                     self.pos = 0;
                     self.cap = cap;
                 }
-                None => {}
+                None => { self.eof = true; }
             }
         }
         return self.buf.slice(self.pos, self.cap);
@@ -134,15 +136,11 @@ impl<R: Reader> Reader for BufferedReader<R> {
             nread
         };
         self.pos += nread;
-        if nread == 0 && self.inner.eof() && buf.len() != 0 {
-                return None;
+        if nread == 0 && buf.len() != 0 && self.eof {
+            return None;
         }
         Some(nread)
     }
-
-    fn eof(&mut self) -> bool {
-        self.pos == self.cap && self.inner.eof()
-    }
 }
 
 /// Wraps a Writer and buffers output to it
@@ -270,7 +268,6 @@ impl<W> InternalBufferedWriter<W> {
 
 impl<W: Reader> Reader for InternalBufferedWriter<W> {
     fn read(&mut self, buf: &mut [u8]) -> Option<uint> { self.get_mut_ref().inner.read(buf) }
-    fn eof(&mut self) -> bool { self.get_mut_ref().inner.eof() }
 }
 
 /// Wraps a Stream and buffers input and output to and from it
@@ -325,7 +322,6 @@ impl<S: Stream> Buffer for BufferedStream<S> {
 
 impl<S: Stream> Reader for BufferedStream<S> {
     fn read(&mut self, buf: &mut [u8]) -> Option<uint> { self.inner.read(buf) }
-    fn eof(&mut self) -> bool { self.inner.eof() }
 }
 
 impl<S: Stream> Writer for BufferedStream<S> {
@@ -351,10 +347,6 @@ mod test {
         fn read(&mut self, _: &mut [u8]) -> Option<uint> {
             None
         }
-
-        fn eof(&mut self) -> bool {
-            true
-        }
     }
 
     impl Writer for NullStream {
@@ -370,10 +362,6 @@ mod test {
         fn read(&mut self, _: &mut [u8]) -> Option<uint> {
             self.lengths.shift_opt()
         }
-
-        fn eof(&mut self) -> bool {
-            self.lengths.len() == 0
-        }
     }
 
     #[test]
@@ -385,24 +373,20 @@ mod test {
         let nread = reader.read(buf);
         assert_eq!(Some(2), nread);
         assert_eq!([0, 1, 0], buf);
-        assert!(!reader.eof());
 
         let mut buf = [0];
         let nread = reader.read(buf);
         assert_eq!(Some(1), nread);
         assert_eq!([2], buf);
-        assert!(!reader.eof());
 
         let mut buf = [0, 0, 0];
         let nread = reader.read(buf);
         assert_eq!(Some(1), nread);
         assert_eq!([3, 0, 0], buf);
-        assert!(!reader.eof());
 
         let nread = reader.read(buf);
         assert_eq!(Some(1), nread);
         assert_eq!([4, 0, 0], buf);
-        assert!(reader.eof());
 
         assert_eq!(None, reader.read(buf));
     }
@@ -466,13 +450,11 @@ mod test {
 
         impl io::Reader for S {
             fn read(&mut self, _: &mut [u8]) -> Option<uint> { None }
-            fn eof(&mut self) -> bool { true }
         }
 
         let mut stream = BufferedStream::new(S);
         let mut buf = [];
         stream.read(buf);
-        stream.eof();
         stream.write(buf);
         stream.flush();
     }
@@ -539,6 +521,7 @@ mod test {
         assert_eq!(reader.read(buf), Some(2));
         assert_eq!(reader.read(buf), Some(0));
         assert_eq!(reader.read(buf), Some(1));
+        assert_eq!(reader.read(buf), Some(0));
         assert_eq!(reader.read(buf), None);
     }
 
diff --git a/src/libstd/io/comm_adapters.rs b/src/libstd/io/comm_adapters.rs
index 7a79857e754..e15b9a861ca 100644
--- a/src/libstd/io/comm_adapters.rs
+++ b/src/libstd/io/comm_adapters.rs
@@ -77,8 +77,6 @@ impl Reader for PortReader {
             Some(num_read)
         }
     }
-
-    fn eof(&mut self) -> bool { self.closed }
 }
 
 /// Allows writing to a chan.
@@ -133,22 +131,17 @@ mod test {
         let mut reader = PortReader::new(port);
         let mut buf = ~[0u8, ..3];
 
-        assert_eq!(false, reader.eof());
 
         assert_eq!(Some(0), reader.read([]));
-        assert_eq!(false, reader.eof());
 
         assert_eq!(Some(3), reader.read(buf));
-        assert_eq!(false, reader.eof());
         assert_eq!(~[1,2,3], buf);
 
         assert_eq!(Some(3), reader.read(buf));
-        assert_eq!(false, reader.eof());
         assert_eq!(~[4,5,6], buf);
 
         assert_eq!(Some(2), reader.read(buf));
         assert_eq!(~[7,8,6], buf);
-        assert_eq!(true, reader.eof());
 
         let mut err = None;
         let result = io::io_error::cond.trap(|io::standard_error(k, _, _)| {
@@ -158,7 +151,6 @@ mod test {
         });
         assert_eq!(Some(io::EndOfFile), err);
         assert_eq!(None, result);
-        assert_eq!(true, reader.eof());
         assert_eq!(~[7,8,6], buf);
 
         // Ensure it continues to fail in the same way.
@@ -170,7 +162,6 @@ mod test {
         });
         assert_eq!(Some(io::EndOfFile), err);
         assert_eq!(None, result);
-        assert_eq!(true, reader.eof());
         assert_eq!(~[7,8,6], buf);
     }
 
diff --git a/src/libstd/io/extensions.rs b/src/libstd/io/extensions.rs
index 3ad05348960..09876f15a8b 100644
--- a/src/libstd/io/extensions.rs
+++ b/src/libstd/io/extensions.rs
@@ -150,9 +150,6 @@ mod test {
                 Some(1)
             }
         }
-        fn eof(&mut self) -> bool {
-            false
-        }
     }
 
     struct EofReader;
@@ -161,9 +158,6 @@ mod test {
         fn read(&mut self, _: &mut [u8]) -> Option<uint> {
             None
         }
-        fn eof(&mut self) -> bool {
-            false
-        }
     }
 
     struct ErroringReader;
@@ -173,9 +167,6 @@ mod test {
             io_error::cond.raise(placeholder_error());
             None
         }
-        fn eof(&mut self) -> bool {
-            false
-        }
     }
 
     struct PartialReader {
@@ -195,9 +186,6 @@ mod test {
                 Some(2)
             }
         }
-        fn eof(&mut self) -> bool {
-            false
-        }
     }
 
     struct ErroringLaterReader {
@@ -215,9 +203,6 @@ mod test {
                 None
             }
         }
-        fn eof(&mut self) -> bool {
-            false
-        }
     }
 
     struct ThreeChunkReader {
@@ -240,9 +225,6 @@ mod test {
                 None
             }
         }
-        fn eof(&mut self) -> bool {
-            false
-        }
     }
 
     #[test]
diff --git a/src/libstd/io/flate.rs b/src/libstd/io/flate.rs
index c56bdf5bec8..0cf00b2c1a9 100644
--- a/src/libstd/io/flate.rs
+++ b/src/libstd/io/flate.rs
@@ -49,6 +49,4 @@ impl<R: Reader> InflateReader<R> {
 
 impl<R: Reader> Reader for InflateReader<R> {
     fn read(&mut self, _buf: &mut [u8]) -> Option<uint> { fail!() }
-
-    fn eof(&mut self) -> bool { fail!() }
 }
diff --git a/src/libstd/io/fs.rs b/src/libstd/io/fs.rs
index cf203f2782c..a3f84fe2afa 100644
--- a/src/libstd/io/fs.rs
+++ b/src/libstd/io/fs.rs
@@ -205,6 +205,14 @@ impl File {
     pub fn truncate(&mut self, size: i64) {
         self.fd.truncate(size).map_err(|e| io_error::cond.raise(e));
     }
+
+    /// Tests whether this stream has reached EOF.
+    ///
+    /// If true, then this file will no longer continue to return data via
+    /// `read`.
+    pub fn eof(&self) -> bool {
+        self.last_nread == 0
+    }
 }
 
 /// Unlink a file from the underlying filesystem.
@@ -597,8 +605,6 @@ impl Reader for File {
             }
         }
     }
-
-    fn eof(&mut self) -> bool { self.last_nread == 0 }
 }
 
 impl Writer for File {
diff --git a/src/libstd/io/mem.rs b/src/libstd/io/mem.rs
index 95cf7ab4078..53aa176134d 100644
--- a/src/libstd/io/mem.rs
+++ b/src/libstd/io/mem.rs
@@ -124,7 +124,7 @@ impl MemReader {
 
 impl Reader for MemReader {
     fn read(&mut self, buf: &mut [u8]) -> Option<uint> {
-        { if self.eof() { return None; } }
+        if self.pos == self.buf.len() { return None }
 
         let write_len = min(buf.len(), self.buf.len() - self.pos);
         {
@@ -138,8 +138,6 @@ impl Reader for MemReader {
 
         return Some(write_len);
     }
-
-    fn eof(&mut self) -> bool { self.pos == self.buf.len() }
 }
 
 impl Seek for MemReader {
@@ -222,7 +220,7 @@ impl<'a> BufReader<'a> {
 
 impl<'a> Reader for BufReader<'a> {
     fn read(&mut self, buf: &mut [u8]) -> Option<uint> {
-        { if self.eof() { return None; } }
+        if self.pos == self.buf.len() { return None }
 
         let write_len = min(buf.len(), self.buf.len() - self.pos);
         {
@@ -236,8 +234,6 @@ impl<'a> Reader for BufReader<'a> {
 
         return Some(write_len);
      }
-
-    fn eof(&mut self) -> bool { self.pos == self.buf.len() }
 }
 
 impl<'a> Seek for BufReader<'a> {
@@ -369,9 +365,7 @@ mod test {
         assert_eq!(buf, [1, 2, 3, 4]);
         assert_eq!(reader.read(buf), Some(3));
         assert_eq!(buf.slice(0, 3), [5, 6, 7]);
-        assert!(reader.eof());
         assert_eq!(reader.read(buf), None);
-        assert!(reader.eof());
     }
 
     #[test]
@@ -391,9 +385,7 @@ mod test {
         assert_eq!(buf, [1, 2, 3, 4]);
         assert_eq!(reader.read(buf), Some(3));
         assert_eq!(buf.slice(0, 3), [5, 6, 7]);
-        assert!(reader.eof());
         assert_eq!(reader.read(buf), None);
-        assert!(reader.eof());
     }
 
     #[test]
diff --git a/src/libstd/io/mod.rs b/src/libstd/io/mod.rs
index a40999a8042..3ab710e9356 100644
--- a/src/libstd/io/mod.rs
+++ b/src/libstd/io/mod.rs
@@ -502,26 +502,6 @@ pub trait Reader {
     /// Is it actually possible for 0 bytes to be read successfully?
     fn read(&mut self, buf: &mut [u8]) -> Option<uint>;
 
-    /// Return whether the Reader has reached the end of the stream.
-    ///
-    /// # Example
-    ///
-    /// ```rust
-    /// use std::io;
-    /// # let _g = ::std::io::ignore_io_error();
-    /// let mut reader = io::stdin();
-    ///
-    /// let mut bytes = [0, .. 10];
-    /// reader.read(bytes);
-    ///
-    /// if reader.eof() { println("stdin() had at most 10 bytes of data."); }
-    /// ```
-    ///
-    /// # Failure
-    ///
-    /// Returns `true` on failure.
-    fn eof(&mut self) -> bool;
-
     // Convenient helper methods based on the above methods
 
     /// Reads a single byte. Returns `None` on EOF.
@@ -864,12 +844,10 @@ pub trait Reader {
 
 impl Reader for ~Reader {
     fn read(&mut self, buf: &mut [u8]) -> Option<uint> { self.read(buf) }
-    fn eof(&mut self) -> bool { self.eof() }
 }
 
 impl<'a> Reader for &'a mut Reader {
     fn read(&mut self, buf: &mut [u8]) -> Option<uint> { self.read(buf) }
-    fn eof(&mut self) -> bool { self.eof() }
 }
 
 fn extend_sign(val: u64, nbytes: uint) -> i64 {
diff --git a/src/libstd/io/net/tcp.rs b/src/libstd/io/net/tcp.rs
index c2a70e0120d..023a9bddca9 100644
--- a/src/libstd/io/net/tcp.rs
+++ b/src/libstd/io/net/tcp.rs
@@ -67,8 +67,6 @@ impl Reader for TcpStream {
             }
         }
     }
-
-    fn eof(&mut self) -> bool { fail!() }
 }
 
 impl Writer for TcpStream {
diff --git a/src/libstd/io/net/udp.rs b/src/libstd/io/net/udp.rs
index eaee48dc6e0..8a866c2a357 100644
--- a/src/libstd/io/net/udp.rs
+++ b/src/libstd/io/net/udp.rs
@@ -86,8 +86,6 @@ impl Reader for UdpStream {
             }
         })
     }
-
-    fn eof(&mut self) -> bool { fail!() }
 }
 
 impl Writer for UdpStream {
diff --git a/src/libstd/io/net/unix.rs b/src/libstd/io/net/unix.rs
index 01b409d4316..232ca670597 100644
--- a/src/libstd/io/net/unix.rs
+++ b/src/libstd/io/net/unix.rs
@@ -67,7 +67,6 @@ impl UnixStream {
 
 impl Reader for UnixStream {
     fn read(&mut self, buf: &mut [u8]) -> Option<uint> { self.obj.read(buf) }
-    fn eof(&mut self) -> bool { self.obj.eof() }
 }
 
 impl Writer for UnixStream {
diff --git a/src/libstd/io/option.rs b/src/libstd/io/option.rs
index 65fa71dd415..e2eec652d9d 100644
--- a/src/libstd/io/option.rs
+++ b/src/libstd/io/option.rs
@@ -48,16 +48,6 @@ impl<R: Reader> Reader for Option<R> {
             }
         }
     }
-
-    fn eof(&mut self) -> bool {
-        match *self {
-            Some(ref mut reader) => reader.eof(),
-            None => {
-                io_error::cond.raise(prev_io_error());
-                true
-            }
-        }
-    }
 }
 
 impl<S: Seek> Seek for Option<S> {
@@ -145,7 +135,6 @@ mod test {
         let mut buf = [0, 0];
         reader.read(buf);
         assert_eq!(buf, [0, 1]);
-        assert!(!reader.eof());
     }
 
     #[test]
@@ -161,14 +150,5 @@ mod test {
             reader.read(buf);
         });
         assert!(called);
-
-        let mut called = false;
-        io_error::cond.trap(|err| {
-            assert_eq!(err.kind, PreviousIoError);
-            called = true;
-        }).inside(|| {
-            assert!(reader.eof());
-        });
-        assert!(called);
     }
 }
diff --git a/src/libstd/io/pipe.rs b/src/libstd/io/pipe.rs
index e3f2cc2384c..799adff37e3 100644
--- a/src/libstd/io/pipe.rs
+++ b/src/libstd/io/pipe.rs
@@ -66,8 +66,6 @@ impl Reader for PipeStream {
             }
         }
     }
-
-    fn eof(&mut self) -> bool { false }
 }
 
 impl Writer for PipeStream {
diff --git a/src/libstd/io/stdio.rs b/src/libstd/io/stdio.rs
index 6e6cdfb25de..f3177276bc2 100644
--- a/src/libstd/io/stdio.rs
+++ b/src/libstd/io/stdio.rs
@@ -272,8 +272,6 @@ impl Reader for StdReader {
             }
         }
     }
-
-    fn eof(&mut self) -> bool { false }
 }
 
 /// Representation of a writer to a standard output stream
diff --git a/src/libstd/io/util.rs b/src/libstd/io/util.rs
index 0f64e9f874b..612c757ad4c 100644
--- a/src/libstd/io/util.rs
+++ b/src/libstd/io/util.rs
@@ -36,10 +36,6 @@ impl<'a, R: Reader> Reader for LimitReader<'a, R> {
             len
         })
     }
-
-    fn eof(&mut self) -> bool {
-        self.limit == 0 || self.inner.eof()
-    }
 }
 
 /// A `Writer` which ignores bytes written to it, like /dev/null.
@@ -59,11 +55,6 @@ impl Reader for ZeroReader {
         buf.set_memory(0);
         Some(buf.len())
     }
-
-    #[inline]
-    fn eof(&mut self) -> bool {
-        false
-    }
 }
 
 /// A `Reader` which is always at EOF, like /dev/null.
@@ -74,11 +65,6 @@ impl Reader for NullReader {
     fn read(&mut self, _buf: &mut [u8]) -> Option<uint> {
         None
     }
-
-    #[inline]
-    fn eof(&mut self) -> bool {
-        true
-    }
 }
 
 /// A `Writer` which multiplexes writes to a set of `Writers`.
@@ -140,10 +126,6 @@ impl<R: Reader, I: Iterator<R>> Reader for ChainedReader<I, R> {
         }
         None
     }
-
-    fn eof(&mut self) -> bool {
-        self.cur_reader.is_none()
-    }
 }
 
 /// A `Reader` which forwards input from another `Reader`, passing it along to
@@ -174,10 +156,6 @@ impl<R: Reader, W: Writer> Reader for TeeReader<R, W> {
             len
         })
     }
-
-    fn eof(&mut self) -> bool {
-        self.reader.eof()
-    }
 }
 
 /// Copies all data from a `Reader` to a `Writer`.
@@ -204,7 +182,6 @@ mod test {
             let mut r = LimitReader::new(&mut r, 4);
             assert_eq!(~[0, 1, 2], r.read_to_end());
         }
-        assert!(r.eof());
     }
 
     #[test]
@@ -238,7 +215,6 @@ mod test {
         let mut r = NullReader;
         let mut buf = ~[0];
         assert_eq!(r.read(buf), None);
-        assert!(r.eof());
     }
 
     #[test]
@@ -289,7 +265,6 @@ mod test {
         let mut r = MemReader::new(~[0, 1, 2, 3, 4]);
         let mut w = MemWriter::new();
         copy(&mut r, &mut w);
-        assert!(r.eof());
         assert_eq!(~[0, 1, 2, 3, 4], w.unwrap());
     }
 }