@@ -206,6 +206,41 @@ impl Buffer for MemReader {
206
206
fn consume ( & mut self , amt : uint ) { self . pos += amt; }
207
207
}
208
208
209
+ impl < ' a > Reader for & ' a [ u8 ] {
210
+ #[ inline]
211
+ fn read ( & mut self , buf : & mut [ u8 ] ) -> IoResult < uint > {
212
+ if self . is_empty ( ) { return Err ( io:: standard_error ( io:: EndOfFile ) ) ; }
213
+
214
+ let write_len = min ( buf. len ( ) , self . len ( ) ) ;
215
+ {
216
+ let input = self [ ..write_len] ;
217
+ let output = buf[ mut ..write_len] ;
218
+ slice:: bytes:: copy_memory ( output, input) ;
219
+ }
220
+
221
+ * self = self . slice_from ( write_len) ;
222
+
223
+ Ok ( write_len)
224
+ }
225
+ }
226
+
227
+ impl < ' a > Buffer for & ' a [ u8 ] {
228
+ #[ inline]
229
+ fn fill_buf < ' a > ( & ' a mut self ) -> IoResult < & ' a [ u8 ] > {
230
+ if self . is_empty ( ) {
231
+ Err ( io:: standard_error ( io:: EndOfFile ) )
232
+ } else {
233
+ Ok ( * self )
234
+ }
235
+ }
236
+
237
+ #[ inline]
238
+ fn consume ( & mut self , amt : uint ) {
239
+ * self = self [ amt..] ;
240
+ }
241
+ }
242
+
243
+
209
244
/// Writes to a fixed-size byte slice
210
245
///
211
246
/// If a write will not fit in the buffer, it returns an error and does not
@@ -469,6 +504,32 @@ mod test {
469
504
assert ! ( reader. read( & mut buf) . is_err( ) ) ;
470
505
}
471
506
507
+ #[ test]
508
+ fn test_slice_reader ( ) {
509
+ let in_buf = vec ! [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ;
510
+ let mut reader = & mut in_buf. as_slice ( ) ;
511
+ let mut buf = [ ] ;
512
+ assert_eq ! ( reader. read( & mut buf) , Ok ( 0 ) ) ;
513
+ let mut buf = [ 0 ] ;
514
+ assert_eq ! ( reader. read( & mut buf) , Ok ( 1 ) ) ;
515
+ assert_eq ! ( reader. len( ) , 7 ) ;
516
+ let b: & [ _ ] = & [ 0 ] ;
517
+ assert_eq ! ( buf. as_slice( ) , b) ;
518
+ let mut buf = [ 0 , ..4 ] ;
519
+ assert_eq ! ( reader. read( & mut buf) , Ok ( 4 ) ) ;
520
+ assert_eq ! ( reader. len( ) , 3 ) ;
521
+ let b: & [ _ ] = & [ 1 , 2 , 3 , 4 ] ;
522
+ assert_eq ! ( buf. as_slice( ) , b) ;
523
+ assert_eq ! ( reader. read( & mut buf) , Ok ( 3 ) ) ;
524
+ let b: & [ _ ] = & [ 5 , 6 , 7 ] ;
525
+ assert_eq ! ( buf[ 0 ..3 ] , b) ;
526
+ assert ! ( reader. read( & mut buf) . is_err( ) ) ;
527
+ let mut reader = & mut in_buf. as_slice ( ) ;
528
+ assert_eq ! ( reader. read_until( 3 ) . unwrap( ) , vec!( 0 , 1 , 2 , 3 ) ) ;
529
+ assert_eq ! ( reader. read_until( 3 ) . unwrap( ) , vec!( 4 , 5 , 6 , 7 ) ) ;
530
+ assert ! ( reader. read( & mut buf) . is_err( ) ) ;
531
+ }
532
+
472
533
#[ test]
473
534
fn test_buf_reader ( ) {
474
535
let in_buf = vec ! [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ;
0 commit comments