@@ -272,60 +272,42 @@ fn file_reader(path: ~str) -> result<Reader, ~str> {
272
272
273
273
// Byte buffer readers
274
274
275
- type ByteBuf = {buf: ~ [const u8], mut pos: uint, len : uint};
275
+ type ByteBuf = {buf: & [const u8], mut pos: uint};
276
276
277
277
impl ByteBuf: Reader {
278
278
fn read(buf: &[mut u8], len: uint) -> uint {
279
- let count = uint::min(len, self.len - self.pos);
279
+ let count = uint::min(len, self.buf. len() - self.pos);
280
280
281
- vec::u8::memcpy(buf, vec::const_view(self.buf, self.pos, self.len),
281
+ vec::u8::memcpy(buf,
282
+ vec::const_view(self.buf, self.pos, self.buf.len()),
282
283
count);
283
284
284
285
self.pos += count;
285
286
286
287
count
287
288
}
288
289
fn read_byte() -> int {
289
- if self.pos == self.len { return -1; }
290
+ if self.pos == self.buf. len() { return -1; }
290
291
let b = self.buf[self.pos];
291
292
self.pos += 1u;
292
293
return b as int;
293
294
}
294
295
// FIXME (#2738): implement this
295
296
fn unread_byte(_byte: int) { error!(" Unimplemented : unread_byte") ; fail; }
296
- fn eof ( ) -> bool { self . pos == self . len }
297
+ fn eof ( ) -> bool { self . pos == self . buf . len ( ) }
297
298
fn seek ( offset : int , whence : SeekStyle ) {
298
299
let pos = self . pos ;
299
- self . pos = seek_in_buf ( offset, pos, self . len , whence) ;
300
+ self . pos = seek_in_buf ( offset, pos, self . buf . len ( ) , whence) ;
300
301
}
301
302
fn tell ( ) -> uint { self . pos }
302
303
}
303
304
304
- fn bytes_reader ( bytes : ~ [ u8 ] ) -> Reader {
305
- bytes_reader_between ( bytes, 0 u , vec :: len ( bytes ) )
305
+ fn with_bytes_reader < t > ( bytes : & [ u8 ] , f : fn ( Reader ) -> t ) -> t {
306
+ f ( { buf : bytes, mut pos : 0 u } as Reader )
306
307
}
307
308
308
- fn bytes_reader_between ( bytes : ~[ u8 ] , start : uint , end : uint ) -> Reader {
309
- { buf: bytes, mut pos: start, len: end} as Reader
310
- }
311
-
312
- fn with_bytes_reader < t > ( bytes : ~[ u8 ] , f : fn ( Reader ) -> t ) -> t {
313
- f ( bytes_reader ( bytes) )
314
- }
315
-
316
- fn with_bytes_reader_between < t > ( bytes : ~[ u8 ] , start : uint , end : uint ,
317
- f : fn ( Reader ) -> t ) -> t {
318
- f ( bytes_reader_between ( bytes, start, end) )
319
- }
320
-
321
- fn str_reader ( s : ~str ) -> Reader {
322
- bytes_reader ( str:: to_bytes ( s) )
323
- }
324
-
325
- fn with_str_reader < T > ( s : ~str , f : fn ( Reader ) -> T ) -> T {
326
- do str:: as_bytes ( s) |bytes| {
327
- with_bytes_reader_between ( bytes, 0 u, str:: len ( s) , f)
328
- }
309
+ fn with_str_reader < T > ( s : & str , f : fn ( Reader ) -> T ) -> T {
310
+ str:: byte_slice ( s, |bytes| with_bytes_reader ( bytes, f) )
329
311
}
330
312
331
313
// Writing
@@ -847,9 +829,10 @@ mod tests {
847
829
848
830
#[ test]
849
831
fn test_readchars_empty ( ) {
850
- let inp : io:: Reader = io:: str_reader ( ~"") ;
851
- let res : ~[ char ] = inp. read_chars ( 128 u) ;
852
- assert ( vec:: len ( res) == 0 u) ;
832
+ do io:: with_str_reader ( ~"") |inp| {
833
+ let res : ~[ char ] = inp. read_chars ( 128 u) ;
834
+ assert ( vec:: len ( res) == 0 u) ;
835
+ }
853
836
}
854
837
855
838
#[ test]
@@ -862,13 +845,14 @@ mod tests {
862
845
29983 , 38152 , 30340 , 27748 ,
863
846
21273 , 20999 , 32905 , 27748 ] ;
864
847
fn check_read_ln ( len : uint , s : ~str , ivals : ~[ int ] ) {
865
- let inp : io:: Reader = io:: str_reader ( s) ;
866
- let res : ~[ char ] = inp. read_chars ( len) ;
867
- if ( len <= vec:: len ( ivals) ) {
868
- assert ( vec:: len ( res) == len) ;
848
+ do io:: with_str_reader ( s) |inp| {
849
+ let res : ~[ char ] = inp. read_chars ( len) ;
850
+ if ( len <= vec:: len ( ivals) ) {
851
+ assert ( vec:: len ( res) == len) ;
852
+ }
853
+ assert ( vec:: slice ( ivals, 0 u, vec:: len ( res) ) ==
854
+ vec:: map ( res, |x| x as int ) ) ;
869
855
}
870
- assert ( vec:: slice ( ivals, 0 u, vec:: len ( res) ) ==
871
- vec:: map ( res, |x| x as int ) ) ;
872
856
}
873
857
let mut i = 0 u;
874
858
while i < 8 u {
@@ -881,16 +865,18 @@ mod tests {
881
865
882
866
#[ test]
883
867
fn test_readchar ( ) {
884
- let inp : io:: Reader = io:: str_reader ( ~"生") ;
885
- let res : char = inp. read_char ( ) ;
886
- assert ( res as int == 29983 ) ;
868
+ do io:: with_str_reader ( ~"生") |inp| {
869
+ let res : char = inp. read_char ( ) ;
870
+ assert ( res as int == 29983 ) ;
871
+ }
887
872
}
888
873
889
874
#[ test]
890
875
fn test_readchar_empty ( ) {
891
- let inp : io:: Reader = io:: str_reader ( ~"") ;
892
- let res : char = inp. read_char ( ) ;
893
- assert ( res as int == -1 ) ;
876
+ do io:: with_str_reader ( ~"") |inp| {
877
+ let res : char = inp. read_char ( ) ;
878
+ assert ( res as int == -1 ) ;
879
+ }
894
880
}
895
881
896
882
#[ test]
0 commit comments