Skip to content

Commit 61d65cd

Browse files
committed
auto merge of #14765 : rapha/rust/master, r=alexcrichton
2 parents 443a1cd + 1638c4b commit 61d65cd

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

src/libstd/io/comm_adapters.rs

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ use option::{None, Option, Some};
1717
use result::{Ok, Err};
1818
use super::{Reader, Writer, IoResult};
1919
use str::StrSlice;
20-
use slice::{bytes, CloneableVector, MutableVector, ImmutableVector};
20+
use slice::{bytes, MutableVector, ImmutableVector};
21+
use vec::Vec;
2122

2223
/// Allows reading from a rx.
2324
///
@@ -30,22 +31,22 @@ use slice::{bytes, CloneableVector, MutableVector, ImmutableVector};
3031
/// # drop(tx);
3132
/// let mut reader = ChanReader::new(rx);
3233
///
33-
/// let mut buf = ~[0u8, ..100];
34+
/// let mut buf = [0u8, ..100];
3435
/// match reader.read(buf) {
3536
/// Ok(nread) => println!("Read {} bytes", nread),
3637
/// Err(e) => println!("read error: {}", e),
3738
/// }
3839
/// ```
3940
pub struct ChanReader {
40-
buf: Option<~[u8]>, // A buffer of bytes received but not consumed.
41-
pos: uint, // How many of the buffered bytes have already be consumed.
42-
rx: Receiver<~[u8]>, // The rx to pull data from.
43-
closed: bool, // Whether the pipe this rx connects to has been closed.
41+
buf: Option<Vec<u8>>, // A buffer of bytes received but not consumed.
42+
pos: uint, // How many of the buffered bytes have already be consumed.
43+
rx: Receiver<Vec<u8>>, // The Receiver to pull data from.
44+
closed: bool, // Whether the channel this Receiver connects to has been closed.
4445
}
4546

4647
impl ChanReader {
4748
/// Wraps a `Port` in a `ChanReader` structure
48-
pub fn new(rx: Receiver<~[u8]>) -> ChanReader {
49+
pub fn new(rx: Receiver<Vec<u8>>) -> ChanReader {
4950
ChanReader {
5051
buf: None,
5152
pos: 0,
@@ -99,12 +100,12 @@ impl Reader for ChanReader {
99100
/// writer.write("hello, world".as_bytes());
100101
/// ```
101102
pub struct ChanWriter {
102-
tx: Sender<~[u8]>,
103+
tx: Sender<Vec<u8>>,
103104
}
104105

105106
impl ChanWriter {
106107
/// Wraps a channel in a `ChanWriter` structure
107-
pub fn new(tx: Sender<~[u8]>) -> ChanWriter {
108+
pub fn new(tx: Sender<Vec<u8>>) -> ChanWriter {
108109
ChanWriter { tx: tx }
109110
}
110111
}
@@ -117,7 +118,7 @@ impl Clone for ChanWriter {
117118

118119
impl Writer for ChanWriter {
119120
fn write(&mut self, buf: &[u8]) -> IoResult<()> {
120-
self.tx.send_opt(buf.to_owned()).map_err(|_| {
121+
self.tx.send_opt(Vec::from_slice(buf)).map_err(|_| {
121122
io::IoError {
122123
kind: io::BrokenPipe,
123124
desc: "Pipe closed",
@@ -139,40 +140,40 @@ mod test {
139140
fn test_rx_reader() {
140141
let (tx, rx) = channel();
141142
task::spawn(proc() {
142-
tx.send(box [1u8, 2u8]);
143-
tx.send(box []);
144-
tx.send(box [3u8, 4u8]);
145-
tx.send(box [5u8, 6u8]);
146-
tx.send(box [7u8, 8u8]);
143+
tx.send(vec![1u8, 2u8]);
144+
tx.send(vec![]);
145+
tx.send(vec![3u8, 4u8]);
146+
tx.send(vec![5u8, 6u8]);
147+
tx.send(vec![7u8, 8u8]);
147148
});
148149

149150
let mut reader = ChanReader::new(rx);
150-
let mut buf = box [0u8, ..3];
151+
let mut buf = [0u8, ..3];
151152

152153

153154
assert_eq!(Ok(0), reader.read([]));
154155

155156
assert_eq!(Ok(3), reader.read(buf));
156-
assert_eq!(box [1,2,3], buf);
157+
assert_eq!(&[1,2,3], buf.as_slice());
157158

158159
assert_eq!(Ok(3), reader.read(buf));
159-
assert_eq!(box [4,5,6], buf);
160+
assert_eq!(&[4,5,6], buf.as_slice());
160161

161162
assert_eq!(Ok(2), reader.read(buf));
162-
assert_eq!(box [7,8,6], buf);
163+
assert_eq!(&[7,8,6], buf.as_slice());
163164

164165
match reader.read(buf) {
165166
Ok(..) => fail!(),
166167
Err(e) => assert_eq!(e.kind, io::EndOfFile),
167168
}
168-
assert_eq!(box [7,8,6], buf);
169+
assert_eq!(&[7,8,6], buf.as_slice());
169170

170171
// Ensure it continues to fail in the same way.
171172
match reader.read(buf) {
172173
Ok(..) => fail!(),
173174
Err(e) => assert_eq!(e.kind, io::EndOfFile),
174175
}
175-
assert_eq!(box [7,8,6], buf);
176+
assert_eq!(&[7,8,6], buf.as_slice());
176177
}
177178

178179
#[test]
@@ -181,7 +182,7 @@ mod test {
181182
let mut writer = ChanWriter::new(tx);
182183
writer.write_be_u32(42).unwrap();
183184

184-
let wanted = box [0u8, 0u8, 0u8, 42u8];
185+
let wanted = vec![0u8, 0u8, 0u8, 42u8];
185186
let got = task::try(proc() { rx.recv() }).unwrap();
186187
assert_eq!(wanted, got);
187188

0 commit comments

Comments
 (0)