@@ -265,6 +265,16 @@ impl Write for Cursor<Vec<u8>> {
265
265
fn flush ( & mut self ) -> io:: Result < ( ) > { Ok ( ( ) ) }
266
266
}
267
267
268
+ #[ stable( feature = "cursor_box_slice" , since = "1.5.0" ) ]
269
+ impl Write for Cursor < Box < [ u8 ] > > {
270
+ fn write ( & mut self , buf : & [ u8 ] ) -> io:: Result < usize > {
271
+ let pos = cmp:: min ( self . pos , self . inner . len ( ) as u64 ) ;
272
+ let amt = try!( ( & mut self . inner [ ( pos as usize ) ..] ) . write ( buf) ) ;
273
+ self . pos += amt as u64 ;
274
+ Ok ( amt)
275
+ }
276
+ fn flush ( & mut self ) -> io:: Result < ( ) > { Ok ( ( ) ) }
277
+ }
268
278
269
279
#[ cfg( test) ]
270
280
mod tests {
@@ -292,6 +302,24 @@ mod tests {
292
302
assert_eq ! ( & writer. get_ref( ) [ ..] , b) ;
293
303
}
294
304
305
+ #[ test]
306
+ fn test_box_slice_writer ( ) {
307
+ let mut writer = Cursor :: new ( vec ! [ 0u8 ; 9 ] . into_boxed_slice ( ) ) ;
308
+ assert_eq ! ( writer. position( ) , 0 ) ;
309
+ assert_eq ! ( writer. write( & [ 0 ] ) . unwrap( ) , 1 ) ;
310
+ assert_eq ! ( writer. position( ) , 1 ) ;
311
+ assert_eq ! ( writer. write( & [ 1 , 2 , 3 ] ) . unwrap( ) , 3 ) ;
312
+ assert_eq ! ( writer. write( & [ 4 , 5 , 6 , 7 ] ) . unwrap( ) , 4 ) ;
313
+ assert_eq ! ( writer. position( ) , 8 ) ;
314
+ assert_eq ! ( writer. write( & [ ] ) . unwrap( ) , 0 ) ;
315
+ assert_eq ! ( writer. position( ) , 8 ) ;
316
+
317
+ assert_eq ! ( writer. write( & [ 8 , 9 ] ) . unwrap( ) , 1 ) ;
318
+ assert_eq ! ( writer. write( & [ 10 ] ) . unwrap( ) , 0 ) ;
319
+ let b: & [ _ ] = & [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ;
320
+ assert_eq ! ( & * * writer. get_ref( ) , b) ;
321
+ }
322
+
295
323
#[ test]
296
324
fn test_buf_writer ( ) {
297
325
let mut buf = [ 0 as u8 ; 9 ] ;
@@ -373,6 +401,28 @@ mod tests {
373
401
assert_eq ! ( reader. read( & mut buf) . unwrap( ) , 0 ) ;
374
402
}
375
403
404
+ #[ test]
405
+ fn test_boxed_slice_reader ( ) {
406
+ let mut reader = Cursor :: new ( vec ! ( 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ) . into_boxed_slice ( ) ) ;
407
+ let mut buf = [ ] ;
408
+ assert_eq ! ( reader. read( & mut buf) . unwrap( ) , 0 ) ;
409
+ assert_eq ! ( reader. position( ) , 0 ) ;
410
+ let mut buf = [ 0 ] ;
411
+ assert_eq ! ( reader. read( & mut buf) . unwrap( ) , 1 ) ;
412
+ assert_eq ! ( reader. position( ) , 1 ) ;
413
+ let b: & [ _ ] = & [ 0 ] ;
414
+ assert_eq ! ( buf, b) ;
415
+ let mut buf = [ 0 ; 4 ] ;
416
+ assert_eq ! ( reader. read( & mut buf) . unwrap( ) , 4 ) ;
417
+ assert_eq ! ( reader. position( ) , 5 ) ;
418
+ let b: & [ _ ] = & [ 1 , 2 , 3 , 4 ] ;
419
+ assert_eq ! ( buf, b) ;
420
+ assert_eq ! ( reader. read( & mut buf) . unwrap( ) , 3 ) ;
421
+ let b: & [ _ ] = & [ 5 , 6 , 7 ] ;
422
+ assert_eq ! ( & buf[ ..3 ] , b) ;
423
+ assert_eq ! ( reader. read( & mut buf) . unwrap( ) , 0 ) ;
424
+ }
425
+
376
426
#[ test]
377
427
fn read_to_end ( ) {
378
428
let mut reader = Cursor :: new ( vec ! ( 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ) ;
@@ -459,6 +509,10 @@ mod tests {
459
509
let mut r = Cursor :: new ( & mut buf[ ..] ) ;
460
510
assert_eq ! ( r. seek( SeekFrom :: Start ( 10 ) ) . unwrap( ) , 10 ) ;
461
511
assert_eq ! ( r. write( & [ 3 ] ) . unwrap( ) , 0 ) ;
512
+
513
+ let mut r = Cursor :: new ( vec ! [ 10 ] . into_boxed_slice ( ) ) ;
514
+ assert_eq ! ( r. seek( SeekFrom :: Start ( 10 ) ) . unwrap( ) , 10 ) ;
515
+ assert_eq ! ( r. write( & [ 3 ] ) . unwrap( ) , 0 ) ;
462
516
}
463
517
464
518
#[ test]
@@ -473,6 +527,9 @@ mod tests {
473
527
let mut buf = [ 0 ] ;
474
528
let mut r = Cursor :: new ( & mut buf[ ..] ) ;
475
529
assert ! ( r. seek( SeekFrom :: End ( -2 ) ) . is_err( ) ) ;
530
+
531
+ let mut r = Cursor :: new ( vec ! ( 10 ) . into_boxed_slice ( ) ) ;
532
+ assert ! ( r. seek( SeekFrom :: End ( -2 ) ) . is_err( ) ) ;
476
533
}
477
534
478
535
#[ test]
0 commit comments