@@ -17,7 +17,8 @@ use option::{None, Option, Some};
17
17
use result:: { Ok , Err } ;
18
18
use super :: { Reader , Writer , IoResult } ;
19
19
use str:: StrSlice ;
20
- use slice:: { bytes, CloneableVector , MutableVector , ImmutableVector } ;
20
+ use slice:: { bytes, MutableVector , ImmutableVector } ;
21
+ use vec:: Vec ;
21
22
22
23
/// Allows reading from a rx.
23
24
///
@@ -30,22 +31,22 @@ use slice::{bytes, CloneableVector, MutableVector, ImmutableVector};
30
31
/// # drop(tx);
31
32
/// let mut reader = ChanReader::new(rx);
32
33
///
33
- /// let mut buf = ~ [0u8, ..100];
34
+ /// let mut buf = [0u8, ..100];
34
35
/// match reader.read(buf) {
35
36
/// Ok(nread) => println!("Read {} bytes", nread),
36
37
/// Err(e) => println!("read error: {}", e),
37
38
/// }
38
39
/// ```
39
40
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.
44
45
}
45
46
46
47
impl ChanReader {
47
48
/// Wraps a `Port` in a `ChanReader` structure
48
- pub fn new ( rx : Receiver < ~ [ u8 ] > ) -> ChanReader {
49
+ pub fn new ( rx : Receiver < Vec < u8 > > ) -> ChanReader {
49
50
ChanReader {
50
51
buf : None ,
51
52
pos : 0 ,
@@ -99,12 +100,12 @@ impl Reader for ChanReader {
99
100
/// writer.write("hello, world".as_bytes());
100
101
/// ```
101
102
pub struct ChanWriter {
102
- tx : Sender < ~ [ u8 ] > ,
103
+ tx : Sender < Vec < u8 > > ,
103
104
}
104
105
105
106
impl ChanWriter {
106
107
/// Wraps a channel in a `ChanWriter` structure
107
- pub fn new ( tx : Sender < ~ [ u8 ] > ) -> ChanWriter {
108
+ pub fn new ( tx : Sender < Vec < u8 > > ) -> ChanWriter {
108
109
ChanWriter { tx : tx }
109
110
}
110
111
}
@@ -117,7 +118,7 @@ impl Clone for ChanWriter {
117
118
118
119
impl Writer for ChanWriter {
119
120
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 ( |_| {
121
122
io:: IoError {
122
123
kind : io:: BrokenPipe ,
123
124
desc : "Pipe closed" ,
@@ -139,40 +140,40 @@ mod test {
139
140
fn test_rx_reader ( ) {
140
141
let ( tx, rx) = channel ( ) ;
141
142
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 ] ) ;
147
148
} ) ;
148
149
149
150
let mut reader = ChanReader :: new ( rx) ;
150
- let mut buf = box [ 0u8 , ..3 ] ;
151
+ let mut buf = [ 0u8 , ..3 ] ;
151
152
152
153
153
154
assert_eq ! ( Ok ( 0 ) , reader. read( [ ] ) ) ;
154
155
155
156
assert_eq ! ( Ok ( 3 ) , reader. read( buf) ) ;
156
- assert_eq ! ( box [ 1 , 2 , 3 ] , buf) ;
157
+ assert_eq ! ( & [ 1 , 2 , 3 ] , buf. as_slice ( ) ) ;
157
158
158
159
assert_eq ! ( Ok ( 3 ) , reader. read( buf) ) ;
159
- assert_eq ! ( box [ 4 , 5 , 6 ] , buf) ;
160
+ assert_eq ! ( & [ 4 , 5 , 6 ] , buf. as_slice ( ) ) ;
160
161
161
162
assert_eq ! ( Ok ( 2 ) , reader. read( buf) ) ;
162
- assert_eq ! ( box [ 7 , 8 , 6 ] , buf) ;
163
+ assert_eq ! ( & [ 7 , 8 , 6 ] , buf. as_slice ( ) ) ;
163
164
164
165
match reader. read ( buf) {
165
166
Ok ( ..) => fail ! ( ) ,
166
167
Err ( e) => assert_eq ! ( e. kind, io:: EndOfFile ) ,
167
168
}
168
- assert_eq ! ( box [ 7 , 8 , 6 ] , buf) ;
169
+ assert_eq ! ( & [ 7 , 8 , 6 ] , buf. as_slice ( ) ) ;
169
170
170
171
// Ensure it continues to fail in the same way.
171
172
match reader. read ( buf) {
172
173
Ok ( ..) => fail ! ( ) ,
173
174
Err ( e) => assert_eq ! ( e. kind, io:: EndOfFile ) ,
174
175
}
175
- assert_eq ! ( box [ 7 , 8 , 6 ] , buf) ;
176
+ assert_eq ! ( & [ 7 , 8 , 6 ] , buf. as_slice ( ) ) ;
176
177
}
177
178
178
179
#[ test]
@@ -181,7 +182,7 @@ mod test {
181
182
let mut writer = ChanWriter :: new ( tx) ;
182
183
writer. write_be_u32 ( 42 ) . unwrap ( ) ;
183
184
184
- let wanted = box [ 0u8 , 0u8 , 0u8 , 42u8 ] ;
185
+ let wanted = vec ! [ 0u8 , 0u8 , 0u8 , 42u8 ] ;
185
186
let got = task:: try ( proc ( ) { rx. recv ( ) } ) . unwrap ( ) ;
186
187
assert_eq ! ( wanted, got) ;
187
188
0 commit comments