]> git.lizzy.rs Git - rust.git/commitdiff
Tweak the interface of std::io
authorAlex Crichton <alex@alexcrichton.com>
Wed, 15 Jan 2014 21:25:09 +0000 (13:25 -0800)
committerAlex Crichton <alex@alexcrichton.com>
Fri, 17 Jan 2014 18:00:47 +0000 (10:00 -0800)
* Reexport io::mem and io::buffered structs directly under io, make mem/buffered
  private modules
* Remove with_mem_writer
* Remove DEFAULT_CAPACITY and use DEFAULT_BUF_SIZE (in io::buffered)

41 files changed:
doc/complement-cheatsheet.md
doc/guide-conditions.md
src/compiletest/errors.rs
src/compiletest/header.rs
src/libextra/ebml.rs
src/libextra/json.rs
src/libextra/stats.rs
src/libextra/test.rs
src/libextra/time.rs
src/libextra/url.rs
src/libextra/uuid.rs
src/libextra/workcache.rs
src/librustc/driver/driver.rs
src/librustc/metadata/encoder.rs
src/librustc/metadata/tyencode.rs
src/librustc/middle/astencode.rs
src/librustc/middle/liveness.rs
src/librustdoc/html/render.rs
src/librustdoc/lib.rs
src/libstd/fmt/mod.rs
src/libstd/io/buffered.rs
src/libstd/io/extensions.rs
src/libstd/io/mem.rs
src/libstd/io/mod.rs
src/libstd/io/stdio.rs
src/libstd/io/util.rs
src/libstd/logging.rs
src/libstd/rand/reader.rs
src/libstd/repr.rs
src/libstd/to_bytes.rs
src/libsyntax/parse/mod.rs
src/libsyntax/print/pprust.rs
src/test/bench/core-std.rs
src/test/bench/shootout-fasta.rs
src/test/bench/shootout-k-nucleotide-pipes.rs
src/test/bench/shootout-mandelbrot.rs
src/test/bench/sudoku.rs
src/test/run-pass/auto-encode.rs
src/test/run-pass/capturing-logging.rs
src/test/run-pass/deriving-encodable-decodable.rs
src/test/run-pass/ifmt.rs

index 4c106a357e689928f34bc45849bc344a7fc5c7ed..770b0ad14218e5fae64b754b754705faf5c718ee 100644 (file)
@@ -62,8 +62,8 @@ let reader : File = File::open(&path).unwrap_or_else(on_error);
 Use the [`lines`](http://static.rust-lang.org/doc/master/std/io/trait.Buffer.html#method.lines) method on a [`BufferedReader`](http://static.rust-lang.org/doc/master/std/io/buffered/struct.BufferedReader.html).
 
 ~~~
-use std::io::buffered::BufferedReader;
-# use std::io::mem::MemReader;
+use std::io::BufferedReader;
+# use std::io::MemReader;
 
 # let reader = MemReader::new(~[]);
 
index d7b6608ad45a4e4e83c4fe25eab2e440ca9bfc0e..3099cc62b1a3ab44877cee17a323ae7f17a8c9ff 100644 (file)
@@ -46,12 +46,11 @@ An example program that does this task reads like this:
 ~~~~
 # #[allow(unused_imports)];
 # extern mod extra;
-use std::io::buffered::BufferedReader;
-use std::io::File;
+use std::io::{BufferedReader, File};
 # mod BufferedReader {
 #     use std::io::File;
-#     use std::io::mem::MemReader;
-#     use std::io::buffered::BufferedReader;
+#     use std::io::MemReader;
+#     use std::io::BufferedReader;
 #     static s : &'static [u8] = bytes!("1 2\n\
 #                                        34 56\n\
 #                                        789 123\n\
@@ -245,13 +244,12 @@ and trapping its exit status using `task::try`:
 ~~~~
 # #[allow(unused_imports)];
 # extern mod extra;
-use std::io::buffered::BufferedReader;
-use std::io::File;
+use std::io::{BufferedReader, File};
 use std::task;
 # mod BufferedReader {
 #     use std::io::File;
-#     use std::io::mem::MemReader;
-#     use std::io::buffered::BufferedReader;
+#     use std::io::MemReader;
+#     use std::io::BufferedReader;
 #     static s : &'static [u8] = bytes!("1 2\n\
 #                                        34 56\n\
 #                                        789 123\n\
@@ -350,12 +348,11 @@ but similarly clear as the version that used `fail!` in the logic where the erro
 ~~~~
 # #[allow(unused_imports)];
 # extern mod extra;
-use std::io::buffered::BufferedReader;
-use std::io::File;
+use std::io::{BufferedReader, File};
 # mod BufferedReader {
 #     use std::io::File;
-#     use std::io::mem::MemReader;
-#     use std::io::buffered::BufferedReader;
+#     use std::io::MemReader;
+#     use std::io::BufferedReader;
 #     static s : &'static [u8] = bytes!("1 2\n\
 #                                        34 56\n\
 #                                        789 123\n\
@@ -420,12 +417,11 @@ and replaces bad input lines with the pair `(-1,-1)`:
 ~~~~
 # #[allow(unused_imports)];
 # extern mod extra;
-use std::io::buffered::BufferedReader;
-use std::io::File;
+use std::io::{BufferedReader, File};
 # mod BufferedReader {
 #     use std::io::File;
-#     use std::io::mem::MemReader;
-#     use std::io::buffered::BufferedReader;
+#     use std::io::MemReader;
+#     use std::io::BufferedReader;
 #     static s : &'static [u8] = bytes!("1 2\n\
 #                                        34 56\n\
 #                                        789 123\n\
@@ -496,12 +492,11 @@ Changing the condition's return type from `(int,int)` to `Option<(int,int)>` wil
 ~~~~
 # #[allow(unused_imports)];
 # extern mod extra;
-use std::io::buffered::BufferedReader;
-use std::io::File;
+use std::io::{BufferedReader, File};
 # mod BufferedReader {
 #     use std::io::File;
-#     use std::io::mem::MemReader;
-#     use std::io::buffered::BufferedReader;
+#     use std::io::MemReader;
+#     use std::io::BufferedReader;
 #     static s : &'static [u8] = bytes!("1 2\n\
 #                                        34 56\n\
 #                                        789 123\n\
@@ -582,12 +577,11 @@ This can be encoded in the handler API by introducing a helper type: `enum Malfo
 ~~~~
 # #[allow(unused_imports)];
 # extern mod extra;
-use std::io::buffered::BufferedReader;
 use std::io::File;
 # mod BufferedReader {
 #     use std::io::File;
-#     use std::io::mem::MemReader;
-#     use std::io::buffered::BufferedReader;
+#     use std::io::MemReader;
+#     use std::io::BufferedReader;
 #     static s : &'static [u8] = bytes!("1 2\n\
 #                                        34 56\n\
 #                                        789 123\n\
@@ -707,12 +701,11 @@ a second condition and a helper function will suffice:
 ~~~~
 # #[allow(unused_imports)];
 # extern mod extra;
-use std::io::buffered::BufferedReader;
-use std::io::File;
+use std::io::{BufferedReader, File};
 # mod BufferedReader {
 #     use std::io::File;
-#     use std::io::mem::MemReader;
-#     use std::io::buffered::BufferedReader;
+#     use std::io::MemReader;
+#     use std::io::BufferedReader;
 #     static s : &'static [u8] = bytes!("1 2\n\
 #                                        34 56\n\
 #                                        789 123\n\
index b15bf73c193eae422c4d9c726c9620c30c2d8828..3a6b1666c1e796ae2f63c6f67a1032837b2ffd2c 100644 (file)
@@ -8,8 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use std::io::buffered::BufferedReader;
-use std::io::File;
+use std::io::{BufferedReader, File};
 
 pub struct ExpectedError { line: uint, kind: ~str, msg: ~str }
 
index d4a4f38cc63baca38560f6e610058c5e739374ff..3caddb2af4954f855bd1c9da108ce298a44bc71d 100644 (file)
@@ -103,8 +103,7 @@ fn xfail_target(config: &config) -> ~str {
 }
 
 fn iter_header(testfile: &Path, it: |&str| -> bool) -> bool {
-    use std::io::buffered::BufferedReader;
-    use std::io::File;
+    use std::io::{BufferedReader, File};
 
     let mut rdr = BufferedReader::new(File::open(testfile).unwrap());
     for ln in rdr.lines() {
index 3798ed8617e4bff11caeb55863b778a1f5fcf951..9feaa32732460d6f56bfa619b290fc58100c45fe 100644 (file)
@@ -582,7 +582,7 @@ pub mod writer {
     use std::clone::Clone;
     use std::io;
     use std::io::{Writer, Seek};
-    use std::io::mem::MemWriter;
+    use std::io::MemWriter;
     use std::io::extensions::u64_to_be_bytes;
 
     // ebml writing
@@ -935,7 +935,7 @@ mod tests {
     use serialize::Encodable;
     use serialize;
 
-    use std::io::mem::MemWriter;
+    use std::io::MemWriter;
     use std::option::{None, Option, Some};
 
     #[test]
index 68eb4e1e5aca91b6e04673064789761e96269ee6..67a15ac02fda22c84a11873f29b70bde9faf7954 100644 (file)
@@ -21,7 +21,7 @@
 use std::f64;
 use std::hashmap::HashMap;
 use std::io;
-use std::io::mem::MemWriter;
+use std::io::MemWriter;
 use std::num;
 use std::str;
 use std::to_str;
@@ -1506,7 +1506,7 @@ fn test_write_object() {
     }
 
     fn with_str_writer(f: |&mut io::Writer|) -> ~str {
-        use std::io::mem::MemWriter;
+        use std::io::MemWriter;
         use std::str;
 
         let mut m = MemWriter::new();
index 1d57e94035a4c9f806ff4d852faa4f6656ebbe16..629d826c37b7d1786e27212896d63517e1a69119 100644 (file)
@@ -998,7 +998,7 @@ fn test_unif25() {
     #[test]
     fn test_boxplot_nonpositive() {
         fn t(s: &Summary, expected: ~str) {
-            use std::io::mem::MemWriter;
+            use std::io::MemWriter;
             let mut m = MemWriter::new();
             write_boxplot(&mut m as &mut io::Writer, s, 30);
             let out = str::from_utf8_owned(m.unwrap());
index 8d4c4471c89ffb7fa96a830ffd35b6d9e2762c65..84f67743a3acc87a43e32b17cfd0740e8cddb881 100644 (file)
@@ -673,7 +673,7 @@ fn len_if_padded(t: &TestDescAndFn) -> uint {
 
 #[test]
 fn should_sort_failures_before_printing_them() {
-    use std::io::mem::MemWriter;
+    use std::io::MemWriter;
     use std::str;
 
     let test_a = TestDesc {
index d19181ab9f182e02df3daa0177fcda1be222291a..9c9edc3ddd924a9e4c4688c7fb928fbe225175dd 100644 (file)
@@ -10,8 +10,7 @@
 
 #[allow(missing_doc)];
 
-use std::io::Reader;
-use std::io::mem::BufReader;
+use std::io::BufReader;
 use std::libc;
 use std::num;
 use std::str;
index 657ff1737df116ce57f89a2b7f606e6c64498845..7591f564da2b82283bd5c3ee5c3c71a7a97a3490 100644 (file)
@@ -12,8 +12,7 @@
 
 #[allow(missing_doc)];
 
-use std::io::{Reader, Seek};
-use std::io::mem::BufReader;
+use std::io::BufReader;
 use std::cmp::Eq;
 use std::hashmap::HashMap;
 use std::to_bytes;
index b9e3e817414a555b7021245f5a390b9a132423cf..2c48a7a4d3e5d1b445382a9d1cd2816aac93854c 100644 (file)
@@ -522,7 +522,7 @@ mod test {
     use std::str;
     use std::rand;
     use std::num::Zero;
-    use std::io::mem::MemWriter;
+    use std::io::MemWriter;
 
     #[test]
     fn test_new_nil() {
index 9dbb607681dcaae93462e7d0144c821d3a66a1f4..2bec1a2f96221f4ffb6de0d4ab455eb34dc79dc4 100644 (file)
@@ -17,8 +17,7 @@
 use treemap::TreeMap;
 use std::str;
 use std::io;
-use std::io::File;
-use std::io::mem::MemWriter;
+use std::io::{File, MemWriter};
 
 /**
 *
index aa3ab80b487970753eda1ddbd1515c318ca0f7f1..058728f26a018633ee120e91c8a406cbbac966c8 100644 (file)
@@ -30,7 +30,7 @@
 use std::hashmap::{HashMap,HashSet};
 use std::io;
 use std::io::fs;
-use std::io::mem::MemReader;
+use std::io::MemReader;
 use std::os;
 use std::vec;
 use extra::getopts::groups::{optopt, optmulti, optflag, optflagopt};
index 5848744ec1cda6e8b16b3d1162a4d86438cce09f..c46b573c1e0e64f63101d1a34a3a315aef5b5387 100644 (file)
@@ -24,7 +24,7 @@
 use std::cast;
 use std::cell::{Cell, RefCell};
 use std::hashmap::{HashMap, HashSet};
-use std::io::mem::MemWriter;
+use std::io::MemWriter;
 use std::str;
 use std::vec;
 
index 8a8fdd7265216c46e9bffe4e46dc8490e08ec5a4..aca3d9000ded0e7b02fe75e0d310665c2da593e8 100644 (file)
@@ -13,7 +13,7 @@
 use std::cell::RefCell;
 use std::hashmap::HashMap;
 use std::io;
-use std::io::mem::MemWriter;
+use std::io::MemWriter;
 use std::str;
 use std::fmt;
 
index 6a37324e05a69d9c039e63d809fec1bef1a787eb..1b3d91e024ff26bec6eb2ccfe9093951d581ed75 100644 (file)
@@ -1456,7 +1456,7 @@ fn mk_ctxt() -> @fake_ext_ctxt {
 
 #[cfg(test)]
 fn roundtrip(in_item: Option<@ast::Item>) {
-    use std::io::mem::MemWriter;
+    use std::io::MemWriter;
 
     let in_item = in_item.unwrap();
     let mut wr = MemWriter::new();
index 8d6e2b6f6b34c6fabb4c0e59c5121c9b21fd2787..65d2f9c150c84afcefddc009412e96f05914c630 100644 (file)
@@ -794,8 +794,9 @@ pub fn last_loop_scope(&self) -> NodeId {
     }
 
     pub fn ln_str(&self, ln: LiveNode) -> ~str {
-        str::from_utf8_owned(io::mem::with_mem_writer(|wr| {
-            let wr = wr as &mut io::Writer;
+        let mut wr = io::MemWriter::new();
+        {
+            let wr = &mut wr as &mut io::Writer;
             {
                 let lnks = self.ir.lnks.try_borrow();
                 write!(wr,
@@ -823,7 +824,8 @@ pub fn ln_str(&self, ln: LiveNode) -> ~str {
                     write!(wr, "  precedes (successors borrowed)]");
                 }
             }
-        }))
+        }
+        str::from_utf8_owned(wr.unwrap())
     }
 
     pub fn init_empty(&self, ln: LiveNode, succ_ln: LiveNode) {
index 74f94ba00f562b150ef0e6af2d97689d3a6626ee..007a4502a1a66099e5cdbdc770c1fcd3bf6e5354 100644 (file)
 use std::fmt;
 use std::hashmap::{HashMap, HashSet};
 use std::local_data;
-use std::io::buffered::BufferedWriter;
 use std::io;
-use std::io::fs;
-use std::io::File;
+use std::io::{fs, File, BufferedWriter};
 use std::str;
 use std::vec;
 
index 125af757dc71db7a6fe0c4664de2bff0ac20339d..a6bdb2250a6aaccad4c10888e8cc6830ba8a2b7b 100644 (file)
@@ -21,8 +21,7 @@
 
 use std::local_data;
 use std::io;
-use std::io::File;
-use std::io::mem::MemWriter;
+use std::io::{File, MemWriter};
 use std::str;
 use extra::getopts;
 use extra::getopts::groups;
index 8de406f306f4ee400825355713b668f9e71fa186..a075010bfb21439707a025f498d0cc8aed3574da 100644 (file)
@@ -242,7 +242,7 @@ fn main() {
 ```rust
 use std::io;
 
-let mut w = io::mem::MemWriter::new();
+let mut w = io::MemWriter::new();
 write!(&mut w as &mut io::Writer, "Hello {}!", "world");
 ```
 
@@ -470,7 +470,7 @@ fn main() {
 
 use cast;
 use char::Char;
-use io::mem::MemWriter;
+use io::MemWriter;
 use io;
 use str;
 use repr;
index d0894bef413487683f39c635f2f4deedd0c79910..928482b64dfa26a2cffee6f7c59db4cb2674fb5e 100644 (file)
@@ -9,59 +9,37 @@
 // except according to those terms.
 
 //! Buffering wrappers for I/O traits
-//!
-//! It can be excessively inefficient to work directly with a `Reader` or
-//! `Writer`. Every call to `read` or `write` on `TcpStream` results in a
-//! system call, for example. This module provides structures that wrap
-//! `Readers`, `Writers`, and `Streams` and buffer input and output to them.
-//!
-//! # Examples
-//!
-//! ```
-//! let tcp_stream = TcpStream::connect(addr);
-//! let reader = BufferedReader::new(tcp_stream);
-//!
-//! let mut buf: ~[u8] = vec::from_elem(100, 0u8);
-//! match reader.read(buf.as_slice()) {
-//!     Some(nread) => println!("Read {} bytes", nread),
-//!     None => println!("At the end of the stream!")
-//! }
-//! ```
-//!
-//! ```
-//! let tcp_stream = TcpStream::connect(addr);
-//! let writer = BufferedWriter::new(tcp_stream);
-//!
-//! writer.write("hello, world".as_bytes());
-//! writer.flush();
-//! ```
-//!
-//! ```
-//! let tcp_stream = TcpStream::connect(addr);
-//! let stream = BufferedStream::new(tcp_stream);
-//!
-//! stream.write("hello, world".as_bytes());
-//! stream.flush();
-//!
-//! let mut buf = vec::from_elem(100, 0u8);
-//! match stream.read(buf.as_slice()) {
-//!     Some(nread) => println!("Read {} bytes", nread),
-//!     None => println!("At the end of the stream!")
-//! }
-//! ```
-//!
-
-use prelude::*;
 
+use container::Container;
+use io::{Reader, Writer, Stream, Buffer, DEFAULT_BUF_SIZE};
+use iter::ExactSize;
 use num;
+use option::{Option, Some, None};
+use vec::{OwnedVector, ImmutableVector, MutableVector};
 use vec;
-use super::Stream;
-
-// libuv recommends 64k buffers to maximize throughput
-// https://groups.google.com/forum/#!topic/libuv/oQO1HJAIDdA
-static DEFAULT_CAPACITY: uint = 64 * 1024;
 
 /// Wraps a Reader and buffers input from it
+///
+/// It can be excessively inefficient to work directly with a `Reader` or
+/// `Writer`. Every call to `read` or `write` on `TcpStream` results in a
+/// system call, for example. This module provides structures that wrap
+/// `Readers`, `Writers`, and `Streams` and buffer input and output to them.
+///
+/// # Example
+///
+/// ```rust
+/// use std::io::{BufferedReader, File};
+///
+/// # let _g = ::std::io::ignore_io_error();
+/// let file = File::open(&Path::new("message.txt"));
+/// let mut reader = BufferedReader::new(file);
+///
+/// let mut buf = [0, ..100];
+/// match reader.read(buf) {
+///     Some(nread) => println!("Read {} bytes", nread),
+///     None => println!("At the end of the file!")
+/// }
+/// ```
 pub struct BufferedReader<R> {
     priv inner: R,
     priv buf: ~[u8],
@@ -92,7 +70,7 @@ pub fn with_capacity(cap: uint, inner: R) -> BufferedReader<R> {
 
     /// Creates a new `BufferedReader` with a default buffer capacity
     pub fn new(inner: R) -> BufferedReader<R> {
-        BufferedReader::with_capacity(DEFAULT_CAPACITY, inner)
+        BufferedReader::with_capacity(DEFAULT_BUF_SIZE, inner)
     }
 
     /// Gets a reference to the underlying reader.
@@ -146,6 +124,19 @@ fn read(&mut self, buf: &mut [u8]) -> Option<uint> {
 /// Wraps a Writer and buffers output to it
 ///
 /// Note that `BufferedWriter` will NOT flush its buffer when dropped.
+///
+/// # Example
+///
+/// ```rust
+/// use std::io::{BufferedWriter, File};
+///
+/// # let _g = ::std::io::ignore_io_error();
+/// let file = File::open(&Path::new("message.txt"));
+/// let mut writer = BufferedWriter::new(file);
+///
+/// writer.write_str("hello, world");
+/// writer.flush();
+/// ```
 pub struct BufferedWriter<W> {
     priv inner: W,
     priv buf: ~[u8],
@@ -167,7 +158,7 @@ pub fn with_capacity(cap: uint, inner: W) -> BufferedWriter<W> {
 
     /// Creates a new `BufferedWriter` with a default buffer capacity
     pub fn new(inner: W) -> BufferedWriter<W> {
-        BufferedWriter::with_capacity(DEFAULT_CAPACITY, inner)
+        BufferedWriter::with_capacity(DEFAULT_BUF_SIZE, inner)
     }
 
     fn flush_buf(&mut self) {
@@ -273,6 +264,25 @@ fn read(&mut self, buf: &mut [u8]) -> Option<uint> { self.get_mut_ref().inner.re
 /// Wraps a Stream and buffers input and output to and from it
 ///
 /// Note that `BufferedStream` will NOT flush its output buffer when dropped.
+///
+/// # Example
+///
+/// ```rust
+/// use std::io::{BufferedStream, File};
+///
+/// # let _g = ::std::io::ignore_io_error();
+/// let file = File::open(&Path::new("message.txt"));
+/// let mut stream = BufferedStream::new(file);
+///
+/// stream.write("hello, world".as_bytes());
+/// stream.flush();
+///
+/// let mut buf = [0, ..100];
+/// match stream.read(buf) {
+///     Some(nread) => println!("Read {} bytes", nread),
+///     None => println!("At the end of the stream!")
+/// }
+/// ```
 pub struct BufferedStream<S> {
     priv inner: BufferedReader<InternalBufferedWriter<S>>
 }
@@ -292,7 +302,7 @@ pub fn with_capacities(reader_cap: uint, writer_cap: uint, inner: S)
     /// Creates a new buffered stream with the default reader/writer buffer
     /// capacities.
     pub fn new(inner: S) -> BufferedStream<S> {
-        BufferedStream::with_capacities(DEFAULT_CAPACITY, DEFAULT_CAPACITY,
+        BufferedStream::with_capacities(DEFAULT_BUF_SIZE, DEFAULT_BUF_SIZE,
                                         inner)
     }
 
@@ -337,9 +347,9 @@ mod test {
     use super::super::mem::{MemReader, MemWriter, BufReader};
     use Harness = extra::test::BenchHarness;
 
-    /// A type, free to create, primarily intended for benchmarking creation of wrappers that, just
-    /// for construction, don't need a Reader/Writer that does anything useful. Is equivalent to
-    /// `/dev/null` in semantics.
+    /// A type, free to create, primarily intended for benchmarking creation of
+    /// wrappers that, just for construction, don't need a Reader/Writer that
+    /// does anything useful. Is equivalent to `/dev/null` in semantics.
     #[deriving(Clone,Eq,Ord)]
     pub struct NullStream;
 
index 066dc883597e82d98473ffac71eeba2a2cbd54be..72f61a7bf84efa62271ce593df1a5b1ab07843e0 100644 (file)
@@ -141,7 +141,7 @@ pub fn u64_from_be_bytes(data: &[u8],
 mod test {
     use unstable::finally::Finally;
     use prelude::*;
-    use io::mem::{MemReader, MemWriter};
+    use io::{MemReader, MemWriter};
     use io::{io_error, placeholder_error};
 
     struct InitialZeroByteReader {
index f036131d211a6952368f42b9b9bb29761f63c478..660c3d3adbc7933bba6c8f5818ec63c1620a0bd3 100644 (file)
@@ -9,18 +9,28 @@
 // except according to those terms.
 
 //! Readers and Writers for in-memory buffers
-//!
-//! # XXX
-//!
-//! * Should probably have something like this for strings.
-//! * Should they implement Closable? Would take extra state.
+
 use cmp::max;
 use cmp::min;
-use prelude::*;
-use super::*;
+use container::Container;
+use option::{Option, Some, None};
+use super::{Reader, Writer, Seek, Buffer, IoError, SeekStyle, io_error,
+            OtherIoError};
 use vec;
+use vec::{Vector, ImmutableVector, MutableVector, OwnedCopyableVector};
 
 /// Writes to an owned, growable byte vector
+///
+/// # Example
+///
+/// ```rust
+/// use std::io::MemWriter;
+///
+/// let mut w = MemWriter::new();
+/// w.write([0, 1, 2]);
+///
+/// assert_eq!(w.unwrap(), ~[0, 1, 2]);
+/// ```
 pub struct MemWriter {
     priv buf: ~[u8],
     priv pos: uint,
@@ -96,6 +106,16 @@ fn seek(&mut self, pos: i64, style: SeekStyle) {
 }
 
 /// Reads from an owned byte vector
+///
+/// # Example
+///
+/// ```rust
+/// use std::io::MemReader;
+///
+/// let mut r = MemReader::new(~[0, 1, 2]);
+///
+/// assert_eq!(r.read_to_end(), ~[0, 1, 2]);
+/// ```
 pub struct MemReader {
     priv buf: ~[u8],
     priv pos: uint
@@ -159,6 +179,19 @@ fn fill<'a>(&'a mut self) -> &'a [u8] { self.buf.slice_from(self.pos) }
 ///
 /// If a write will not fit in the buffer, it raises the `io_error`
 /// condition and does not write any data.
+///
+/// # Example
+///
+/// ```rust
+/// use std::io::BufWriter;
+///
+/// let mut buf = [0, ..4];
+/// {
+///     let mut w = BufWriter::new(buf);
+///     w.write([0, 1, 2]);
+/// }
+/// assert_eq!(buf, [0, 1, 2, 0]);
+/// ```
 pub struct BufWriter<'a> {
     priv buf: &'a mut [u8],
     priv pos: uint
@@ -209,12 +242,24 @@ fn seek(&mut self, pos: i64, style: SeekStyle) {
 
 
 /// Reads from a fixed-size byte slice
+///
+/// # Example
+///
+/// ```rust
+/// use std::io::BufReader;
+///
+/// let mut buf = [0, 1, 2, 3];
+/// let mut r = BufReader::new(buf);
+///
+/// assert_eq!(r.read_to_end(), ~[0, 1, 2, 3]);
+/// ```
 pub struct BufReader<'a> {
     priv buf: &'a [u8],
     priv pos: uint
 }
 
 impl<'a> BufReader<'a> {
+    /// Creates a new buffered reader which will read the specified buffer
     pub fn new<'a>(buf: &'a [u8]) -> BufReader<'a> {
         BufReader {
             buf: buf,
@@ -257,14 +302,6 @@ fn fill<'a>(&'a mut self) -> &'a [u8] { self.buf.slice_from(self.pos) }
     fn consume(&mut self, amt: uint) { self.pos += amt; }
 }
 
-///Calls a function with a MemWriter and returns
-///the writer's stored vector.
-pub fn with_mem_writer(writeFn: |&mut MemWriter|) -> ~[u8] {
-    let mut writer = MemWriter::new();
-    writeFn(&mut writer);
-    writer.unwrap()
-}
-
 #[cfg(test)]
 mod test {
     use prelude::*;
@@ -398,12 +435,6 @@ fn test_buf_reader() {
         assert_eq!(reader.read(buf), None);
     }
 
-    #[test]
-    fn test_with_mem_writer() {
-        let buf = with_mem_writer(|wr| wr.write([1,2,3,4,5,6,7]));
-        assert_eq!(buf, ~[1,2,3,4,5,6,7]);
-    }
-
     #[test]
     fn test_read_char() {
         let mut r = BufReader::new(bytes!("Việt"));
index 2e33bef380cbd200ffdb9bf01793caf1f9c39081..6515cbc5fb3e27a02690cf5892219ed0056dc61b 100644 (file)
@@ -26,7 +26,7 @@
 * Read lines from stdin
 
     ```rust
-    use std::io::buffered::BufferedReader;
+    use std::io::BufferedReader;
     use std::io::stdin;
 
     # let _g = ::std::io::ignore_io_error();
@@ -60,7 +60,7 @@
 * Iterate over the lines of a file
 
     ```rust
-    use std::io::buffered::BufferedReader;
+    use std::io::BufferedReader;
     use std::io::File;
 
     # let _g = ::std::io::ignore_io_error();
@@ -74,7 +74,7 @@
 * Pull the lines of a file into a vector of strings
 
     ```rust
-    use std::io::buffered::BufferedReader;
+    use std::io::BufferedReader;
     use std::io::File;
 
     # let _g = ::std::io::ignore_io_error();
 pub use self::pipe::PipeStream;
 pub use self::process::Process;
 
+pub use self::mem::{MemReader, BufReader, MemWriter, BufWriter};
+pub use self::buffered::{BufferedReader, BufferedWriter, BufferedStream,
+                         LineBufferedWriter};
+pub use self::comm_adapters::{PortReader, ChanWriter};
+
 /// Various utility functions useful for writing I/O tests
 pub mod test;
 
 pub mod net;
 
 /// Readers and Writers for memory buffers and strings.
-pub mod mem;
+mod mem;
 
 /// Non-blocking access to stdin, stdout, stderr
 pub mod stdio;
 /// Implementations for Option
 mod option;
 
-/// Basic stream compression. XXX: Belongs with other flate code
-pub mod flate;
-
 /// Extension traits
 pub mod extensions;
 
 pub mod timer;
 
 /// Buffered I/O wrappers
-pub mod buffered;
+mod buffered;
 
 /// Signal handling
 pub mod signal;
 pub mod util;
 
 /// Adapatation of Chan/Port types to a Writer/Reader type.
-pub mod comm_adapters;
+mod comm_adapters;
 
 /// The default buffer size for various I/O operations
+// libuv recommends 64k buffers to maximize throughput
+// https://groups.google.com/forum/#!topic/libuv/oQO1HJAIDdA
 static DEFAULT_BUF_SIZE: uint = 1024 * 64;
 
 /// The type passed to I/O condition handlers to indicate error
@@ -1098,11 +1102,10 @@ pub trait Buffer: Reader {
     /// # Example
     ///
     /// ```rust
-    /// use std::io::buffered::BufferedReader;
-    /// use std::io;
+    /// use std::io::{BufferedReader, stdin};
     /// # let _g = ::std::io::ignore_io_error();
     ///
-    /// let mut reader = BufferedReader::new(io::stdin());
+    /// let mut reader = BufferedReader::new(stdin());
     ///
     /// let input = reader.read_line().unwrap_or(~"nothing");
     /// ```
index f3177276bc286fb495a3f00020c0c64bc884f8e9..f3f071ab78bff6482c9c24afe1dd611f304e1600 100644 (file)
@@ -28,9 +28,8 @@
 
 use container::Container;
 use fmt;
-use io::buffered::LineBufferedWriter;
 use io::{Reader, Writer, io_error, IoError, OtherIoError,
-         standard_error, EndOfFile};
+         standard_error, EndOfFile, LineBufferedWriter};
 use libc;
 use option::{Option, Some, None};
 use prelude::drop;
index 612c757ad4c8c86918a82c111dd83554d1df2171..a1794d24fc9344b70361f0beb523a094563f7d61 100644 (file)
@@ -171,7 +171,7 @@ pub fn copy<R: Reader, W: Writer>(r: &mut R, w: &mut W) {
 
 #[cfg(test)]
 mod test {
-    use io::mem::{MemReader, MemWriter};
+    use io::{MemReader, MemWriter};
     use super::*;
     use prelude::*;
 
index d10b873c5b55e2a9cf1a40c15d2a11c7820ec05f..636d3ffd90a6bb979fbd81ac750048d20e7598b5 100644 (file)
@@ -96,7 +96,7 @@
 */
 
 use fmt;
-use io::buffered::LineBufferedWriter;
+use io::LineBufferedWriter;
 use io;
 use io::Writer;
 use ops::Drop;
index 7af98e418a811f2827b33d569c0cc4c8f6a2c460..e19fbd9aaf8ba7879dd4bc87e0009ff13b1438b9 100644 (file)
@@ -25,9 +25,9 @@
 ///
 /// ```rust
 /// use std::rand::{reader, Rng};
-/// use std::io::mem;
+/// use std::io::MemReader;
 ///
-/// let mut rng = reader::ReaderRng::new(mem::MemReader::new(~[1,2,3,4,5,6,7,8]));
+/// let mut rng = reader::ReaderRng::new(MemReader::new(~[1,2,3,4,5,6,7,8]));
 /// println!("{:x}", rng.gen::<uint>());
 /// ```
 pub struct ReaderRng<R> {
@@ -76,7 +76,7 @@ fn fill_bytes(&mut self, v: &mut [u8]) {
 #[cfg(test)]
 mod test {
     use super::*;
-    use io::mem::MemReader;
+    use io::MemReader;
     use cast;
     use rand::*;
     use prelude::*;
index e0f96365eddbdfaf2fb3f9cee682b50082675c0b..cc166b764d2c4388d3df7d4e46ed884037754031 100644 (file)
@@ -621,7 +621,7 @@ pub fn repr_to_str<T>(t: &T) -> ~str {
     use str;
     use io;
 
-    let mut result = io::mem::MemWriter::new();
+    let mut result = io::MemWriter::new();
     write_repr(&mut result as &mut io::Writer, t);
     str::from_utf8_owned(result.unwrap())
 }
@@ -639,7 +639,7 @@ fn test_repr() {
     use char::is_alphabetic;
 
     fn exact_test<T>(t: &T, e:&str) {
-        let mut m = io::mem::MemWriter::new();
+        let mut m = io::MemWriter::new();
         write_repr(&mut m as &mut io::Writer, t);
         let s = str::from_utf8_owned(m.unwrap());
         assert_eq!(s.as_slice(), e);
index bd1c49c6c241fd8c558cfb4d652464634b4eb5f4..8df028f56d5092fe75fbd43d2bff26bb31ab6bdc 100644 (file)
@@ -359,15 +359,14 @@ pub trait ToBytes {
 
 impl<A:IterBytes> ToBytes for A {
     fn to_bytes(&self, lsb0: bool) -> ~[u8] {
-        use io::mem;
         use io::Writer;
 
-        mem::with_mem_writer(|wr| {
-            self.iter_bytes(lsb0, |bytes| {
-                wr.write(bytes);
-                true
-            });
-        })
+        let mut m = ::io::MemWriter::new();
+        self.iter_bytes(lsb0, |bytes| {
+            m.write(bytes);
+            true
+        });
+        m.unwrap()
     }
 }
 
index ea069c2ffe37d61ca804475acbd7fb0beae04cd6..30a662c9cceda70338b28c387b2e65e5a8040fef 100644 (file)
@@ -337,7 +337,7 @@ mod test {
     use extra::serialize::Encodable;
     use extra;
     use std::io;
-    use std::io::mem::MemWriter;
+    use std::io::MemWriter;
     use std::str;
     use codemap::{Span, BytePos, Spanned};
     use opt_vec;
index b6db827f7b88f13073a4189a9c19d8f4774cf634..3275ba2cef52419de4dce4ccc9f1185c597544ea 100644 (file)
@@ -32,7 +32,7 @@
 use std::char;
 use std::str;
 use std::io;
-use std::io::mem::MemWriter;
+use std::io::MemWriter;
 
 // The &mut State is stored here to prevent recursive type.
 pub enum AnnNode<'a,'b> {
index 9be462f736bc5883744386ecb121143d8afe84db..4d5c4ec24f305d1d63581e8950120c181588b18a 100644 (file)
@@ -70,7 +70,7 @@ fn shift_push() {
 }
 
 fn read_line() {
-    use std::io::buffered::BufferedReader;
+    use std::io::BufferedReader;
 
     let mut path = Path::new(env!("CFG_SRC_DIR"));
     path.push("src/test/bench/shootout-k-nucleotide.data");
index 50138562fa31c9d31e28fbaa136ab9dacc82a71c..74d8af52f7d7ae3fca5b55f3bbe02490881e4483 100644 (file)
@@ -15,8 +15,7 @@
  */
 
 use std::io;
-use std::io::buffered::BufferedWriter;
-use std::io::File;
+use std::io::{BufferedWriter, File};
 use std::num::min;
 use std::os;
 
index cef59b7c0e66c579e381a552389381306d491899..83eb1388c6b173f13fcf4cb1baf78c3576b5037f 100644 (file)
@@ -145,10 +145,7 @@ fn make_sequence_processor(sz: uint,
 
 // given a FASTA file on stdin, process sequence THREE
 fn main() {
-    use std::io::Reader;
-    use std::io::stdio;
-    use std::io::mem::MemReader;
-    use std::io::buffered::BufferedReader;
+    use std::io::{stdio, MemReader, BufferedReader};
 
     let rdr = if os::getenv("RUST_BENCH").is_some() {
         let foo = include_bin!("shootout-k-nucleotide.data");
index 732922cdb0785a38eb283e4f3071226797a54454..a0e9f96b31db85ee97d33859ce7fe79cbe077dbc 100644 (file)
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use std::io::buffered::BufferedWriter;
+use std::io::BufferedWriter;
 
 struct DummyWriter;
 impl Writer for DummyWriter {
index fb14ba71b8828c5b2e7a24fa3276780c32a05588..4980691512d05514afb9a27216d98942280398f7 100644 (file)
@@ -16,7 +16,7 @@
 
 use std::io;
 use std::io::stdio::StdReader;
-use std::io::buffered::BufferedReader;
+use std::io::BufferedReader;
 use std::os;
 use std::unstable::intrinsics::cttz16;
 use std::vec;
index 35e171704ac305a414756610c8071561747064a8..5f697b7e5144001b26953cb5dfc28ca0c96874f6 100644 (file)
@@ -34,7 +34,7 @@ fn test_ebml<'a, A:
     Encodable<EBWriter::Encoder> +
     Decodable<EBReader::Decoder<'a>>
 >(a1: &A) {
-    let mut wr = std::io::mem::MemWriter::new();
+    let mut wr = std::io::MemWriter::new();
     let mut ebml_w = EBWriter::Encoder(&mut wr);
     a1.encode(&mut ebml_w);
     let bytes = wr.get_ref();
index e385c1c14a41112f92675c77094aa023eae2b332..b810bfd1c6b71ddcee2d7d4a96a01d37878202ef 100644 (file)
@@ -16,7 +16,7 @@
 extern mod native;
 
 use std::fmt;
-use std::io::comm_adapters::{PortReader, ChanWriter};
+use std::io::{PortReader, ChanWriter};
 use std::logging::{set_logger, Logger};
 
 struct MyWriter(ChanWriter);
index e22f0a8f8c7806731158ea04a1a278381d758f2c..d16f2135f50152627c66b4da542f378e629323a5 100644 (file)
@@ -18,7 +18,7 @@
 
 extern mod extra;
 
-use std::io::mem::MemWriter;
+use std::io::MemWriter;
 use std::rand::{random, Rand};
 use extra::serialize::{Encodable, Decodable};
 use extra::ebml;
index 837adfce048d9fa0d382af1c300e324d0da0b3c0..54aaa86351e9811d6ec0ef3ff0fe506b5dbbf8d0 100644 (file)
@@ -14,9 +14,8 @@
 #[deny(warnings)];
 
 use std::fmt;
-use std::io::mem::MemWriter;
+use std::io::MemWriter;
 use std::io;
-use std::io::Writer;
 use std::str;
 
 struct A;