@@ -243,6 +243,7 @@ use string::String;
243
243
use uint;
244
244
use unicode:: char:: UnicodeChar ;
245
245
use vec:: Vec ;
246
+ use num:: ToPrimitive ;
246
247
247
248
// Reexports
248
249
pub use self :: stdio:: stdin;
@@ -1602,6 +1603,16 @@ pub trait Seek {
1602
1603
/// stream, but the next write may cause the previous data to be filled in
1603
1604
/// with a bit pattern.
1604
1605
fn seek ( & mut self , pos : i64 , style : SeekStyle ) -> IoResult < ( ) > ;
1606
+
1607
+ /// Wrap seek(num_byes, SeekCur) to provide something similar with Reader::skip().
1608
+ ///
1609
+ /// # Failure
1610
+ ///
1611
+ /// Fails when num_bytes doesn't fit into i64.
1612
+ #[ inline]
1613
+ fn skip ( & mut self , num_bytes : uint ) -> IoResult < uint > {
1614
+ self . seek ( num_bytes. to_i64 ( ) . unwrap ( ) , SeekCur ) . and ( Ok ( num_bytes) )
1615
+ }
1605
1616
}
1606
1617
1607
1618
/// A listener is a value that can consume itself to start listening for
@@ -1947,6 +1958,10 @@ mod tests {
1947
1958
fn new ( r : T , behavior : Vec < BadReaderBehavior > ) -> BadReader < T > {
1948
1959
BadReader { behavior : behavior, r : r }
1949
1960
}
1961
+
1962
+ fn simply_new ( r : T ) -> BadReader < T > {
1963
+ BadReader :: new ( r, vec ! [ ] )
1964
+ }
1950
1965
}
1951
1966
1952
1967
impl < T : Reader > Reader for BadReader < T > {
@@ -1976,20 +1991,18 @@ mod tests {
1976
1991
1977
1992
#[ test]
1978
1993
fn test_read_at_least ( ) {
1979
- let mut r = BadReader :: new ( MemReader :: new ( b"hello, world!" . to_vec ( ) ) ,
1980
- vec ! [ GoodBehavior ( uint:: MAX ) ] ) ;
1994
+ let mut r = BadReader :: simply_new ( MemReader :: new ( b"hello, world!" . to_vec ( ) ) ) ;
1981
1995
let mut buf = [ 0u8 , ..5 ] ;
1982
1996
assert ! ( r. read_at_least( 1 , buf) . unwrap( ) >= 1 ) ;
1983
1997
assert ! ( r. read_exact( 5 ) . unwrap( ) . len( ) == 5 ) ; // read_exact uses read_at_least
1984
1998
assert ! ( r. read_at_least( 0 , buf) . is_ok( ) ) ;
1985
1999
1986
2000
let mut r = BadReader :: new ( MemReader :: new ( b"hello, world!" . to_vec ( ) ) ,
1987
- vec ! [ BadBehavior ( 50 ) , GoodBehavior ( uint :: MAX ) ] ) ;
2001
+ vec ! [ BadBehavior ( 50 ) ] ) ;
1988
2002
assert ! ( r. read_at_least( 1 , buf) . unwrap( ) >= 1 ) ;
1989
2003
1990
2004
let mut r = BadReader :: new ( MemReader :: new ( b"hello, world!" . to_vec ( ) ) ,
1991
- vec ! [ BadBehavior ( 1 ) , GoodBehavior ( 1 ) ,
1992
- BadBehavior ( 50 ) , GoodBehavior ( uint:: MAX ) ] ) ;
2005
+ vec ! [ BadBehavior ( 1 ) , GoodBehavior ( 1 ) , BadBehavior ( 50 ) ] ) ;
1993
2006
assert ! ( r. read_at_least( 1 , buf) . unwrap( ) >= 1 ) ;
1994
2007
assert ! ( r. read_at_least( 1 , buf) . unwrap( ) >= 1 ) ;
1995
2008
@@ -2004,19 +2017,17 @@ mod tests {
2004
2017
2005
2018
#[ test]
2006
2019
fn test_push_at_least ( ) {
2007
- let mut r = BadReader :: new ( MemReader :: new ( b"hello, world!" . to_vec ( ) ) ,
2008
- vec ! [ GoodBehavior ( uint:: MAX ) ] ) ;
2020
+ let mut r = BadReader :: new ( MemReader :: new ( b"hello, world!" . to_vec ( ) ) , vec ! [ ] ) ;
2009
2021
let mut buf = Vec :: new ( ) ;
2010
2022
assert ! ( r. push_at_least( 1 , 5 , & mut buf) . unwrap( ) >= 1 ) ;
2011
2023
assert ! ( r. push_at_least( 0 , 5 , & mut buf) . is_ok( ) ) ;
2012
2024
2013
2025
let mut r = BadReader :: new ( MemReader :: new ( b"hello, world!" . to_vec ( ) ) ,
2014
- vec ! [ BadBehavior ( 50 ) , GoodBehavior ( uint :: MAX ) ] ) ;
2026
+ vec ! [ BadBehavior ( 50 ) ] ) ;
2015
2027
assert ! ( r. push_at_least( 1 , 5 , & mut buf) . unwrap( ) >= 1 ) ;
2016
2028
2017
2029
let mut r = BadReader :: new ( MemReader :: new ( b"hello, world!" . to_vec ( ) ) ,
2018
- vec ! [ BadBehavior ( 1 ) , GoodBehavior ( 1 ) ,
2019
- BadBehavior ( 50 ) , GoodBehavior ( uint:: MAX ) ] ) ;
2030
+ vec ! [ BadBehavior ( 1 ) , GoodBehavior ( 1 ) , BadBehavior ( 50 ) ] ) ;
2020
2031
assert ! ( r. push_at_least( 1 , 5 , & mut buf) . unwrap( ) >= 1 ) ;
2021
2032
assert ! ( r. push_at_least( 1 , 5 , & mut buf) . unwrap( ) >= 1 ) ;
2022
2033
@@ -2031,15 +2042,16 @@ mod tests {
2031
2042
#[ test]
2032
2043
fn test_reader_skip ( ) {
2033
2044
{
2034
- let mut r = MemReader :: new ( b"hello, world!" . to_vec ( ) ) ;
2045
+ let mut r = BadReader :: simply_new ( MemReader :: new ( b"hello, world!" . to_vec ( ) ) ) ;
2035
2046
assert_eq ! ( 7 , r. skip( 7 ) . unwrap( ) ) ;
2036
2047
let mut buf = [ 0_u8 , .. 10 ] ;
2037
2048
assert_eq ! ( 6 , r. read( buf) . unwrap( ) ) ;
2038
2049
assert_eq ! ( b"world!" . as_slice( ) , buf. as_slice( ) ) ;
2039
2050
assert_eq ! ( EndOfFile , r. skip( 0 ) . unwrap_err( ) . kind) ;
2040
2051
}
2041
2052
{
2042
- let mut r = MemReader :: new ( Vec :: from_fn ( SKIP_SIZE + 20 , |i| i as u8 ) ) ;
2053
+ let mut r = BadReader :: simply_new ( MemReader :: new (
2054
+ Vec :: from_fn ( SKIP_SIZE + 20 , |i| i as u8 ) ) ) ;
2043
2055
assert_eq ! ( 10 , r. skip( 10 ) . unwrap( ) ) ;
2044
2056
assert_eq ! ( 10 , r. read_u8( ) . unwrap( ) ) ;
2045
2057
assert_eq ! ( SKIP_SIZE , r. skip( SKIP_SIZE ) . unwrap( ) ) ;
@@ -2049,7 +2061,8 @@ mod tests {
2049
2061
assert_eq ! ( EndOfFile , r. read( buf) . unwrap_err( ) . kind) ;
2050
2062
}
2051
2063
{
2052
- let mut r = MemReader :: new ( Vec :: from_fn ( SKIP_SIZE + 20 , |i| i as u8 ) ) ;
2064
+ let mut r = BadReader :: simply_new ( MemReader :: new (
2065
+ Vec :: from_fn ( SKIP_SIZE + 20 , |i| i as u8 ) ) ) ;
2053
2066
assert_eq ! ( SKIP_SIZE , r. skip( SKIP_SIZE ) . unwrap( ) ) ;
2054
2067
assert_eq ! ( SKIP_SIZE as u8 , r. read_u8( ) . unwrap( ) ) ;
2055
2068
assert_eq ! ( 10 , r. skip( 10 ) . unwrap( ) ) ;
@@ -2059,7 +2072,8 @@ mod tests {
2059
2072
assert_eq ! ( EndOfFile , r. read( buf) . unwrap_err( ) . kind) ;
2060
2073
}
2061
2074
{
2062
- let mut r = MemReader :: new ( Vec :: from_fn ( 2 * SKIP_SIZE + 20 , |i| i as u8 ) ) ;
2075
+ let mut r = BadReader :: simply_new ( MemReader :: new (
2076
+ Vec :: from_fn ( 2 * SKIP_SIZE + 20 , |i| i as u8 ) ) ) ;
2063
2077
assert_eq ! ( 10 , r. skip( 10 ) . unwrap( ) ) ;
2064
2078
assert_eq ! ( 10 , r. read_u8( ) . unwrap( ) ) ;
2065
2079
assert_eq ! ( 2 * SKIP_SIZE , r. skip( 2 * SKIP_SIZE ) . unwrap( ) ) ;
0 commit comments