@@ -17,7 +17,8 @@ use option::{None, Option, Some};
1717use result:: { Ok , Err } ;
1818use super :: { Reader , Writer , IoResult } ;
1919use 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/// ```
3940pub 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
4647impl 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/// ```
101102pub struct ChanWriter {
102- tx : Sender < ~ [ u8 ] > ,
103+ tx : Sender < Vec < u8 > > ,
103104}
104105
105106impl 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
118119impl 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