11
11
use prelude:: v1:: * ;
12
12
use io:: prelude:: * ;
13
13
14
+ use core:: array:: FixedSizeArray ;
14
15
use cmp;
15
16
use io:: { self , SeekFrom , Error , ErrorKind } ;
16
17
use iter:: repeat;
@@ -72,7 +73,7 @@ macro_rules! seek {
72
73
fn seek( & mut self , style: SeekFrom ) -> io:: Result <u64 > {
73
74
let pos = match style {
74
75
SeekFrom :: Start ( n) => { self . pos = n; return Ok ( n) }
75
- SeekFrom :: End ( n) => self . inner. len( ) as i64 + n,
76
+ SeekFrom :: End ( n) => self . inner. as_slice ( ) . len( ) as i64 + n,
76
77
SeekFrom :: Current ( n) => self . pos as i64 + n,
77
78
} ;
78
79
@@ -94,6 +95,7 @@ impl<'a> io::Seek for Cursor<&'a [u8]> { seek!(); }
94
95
impl < ' a > io:: Seek for Cursor < & ' a mut [ u8 ] > { seek ! ( ) ; }
95
96
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
96
97
impl io:: Seek for Cursor < Vec < u8 > > { seek ! ( ) ; }
98
+ impl < ' a , T : FixedSizeArray < u8 > > io:: Seek for Cursor < & ' a T > { seek ! ( ) ; }
97
99
98
100
macro_rules! read {
99
101
( ) => {
@@ -111,12 +113,13 @@ impl<'a> Read for Cursor<&'a [u8]> { read!(); }
111
113
impl < ' a > Read for Cursor < & ' a mut [ u8 ] > { read ! ( ) ; }
112
114
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
113
115
impl Read for Cursor < Vec < u8 > > { read ! ( ) ; }
116
+ impl < ' a , T : FixedSizeArray < u8 > > Read for Cursor < & ' a T > { read ! ( ) ; }
114
117
115
118
macro_rules! buffer {
116
119
( ) => {
117
120
fn fill_buf( & mut self ) -> io:: Result <& [ u8 ] > {
118
- let amt = cmp:: min( self . pos, self . inner. len( ) as u64 ) ;
119
- Ok ( & self . inner[ ( amt as usize ) ..] )
121
+ let amt = cmp:: min( self . pos, self . inner. as_slice ( ) . len( ) as u64 ) ;
122
+ Ok ( & self . inner. as_slice ( ) [ ( amt as usize ) ..] )
120
123
}
121
124
fn consume( & mut self , amt: usize ) { self . pos += amt as u64 ; }
122
125
}
@@ -128,23 +131,7 @@ impl<'a> BufRead for Cursor<&'a [u8]> { buffer!(); }
128
131
impl < ' a > BufRead for Cursor < & ' a mut [ u8 ] > { buffer ! ( ) ; }
129
132
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
130
133
impl < ' a > BufRead for Cursor < Vec < u8 > > { buffer ! ( ) ; }
131
-
132
- macro_rules! array_impls {
133
- ( $( $N: expr) +) => {
134
- $(
135
- impl <' a> io:: Seek for Cursor <& ' a [ u8 ; $N] > { seek!( ) ; }
136
- impl <' a> Read for Cursor <& ' a [ u8 ; $N] > { read!( ) ; }
137
- impl <' a> BufRead for Cursor <& ' a [ u8 ; $N] > { buffer!( ) ; }
138
- ) +
139
- }
140
- }
141
-
142
- array_impls ! {
143
- 0 1 2 3 4 5 6 7 8 9
144
- 10 11 12 13 14 15 16 17 18 19
145
- 20 21 22 23 24 25 26 27 28 29
146
- 30 31 32
147
- }
134
+ impl < ' a , T : FixedSizeArray < u8 > > BufRead for Cursor < & ' a T > { buffer ! ( ) ; }
148
135
149
136
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
150
137
impl < ' a > Write for Cursor < & ' a mut [ u8 ] > {
0 commit comments