@@ -242,6 +242,10 @@ fn new_byte_buf_reader(buf: [u8]) -> buf_reader {
242
242
ret byte_buf_reader ( @{ buf: buf, mutable pos: 0 u} ) ;
243
243
}
244
244
245
+ fn bytes_reader ( bytes : [ u8 ] ) -> reader {
246
+ ret new_reader ( new_byte_buf_reader ( bytes) ) ;
247
+ }
248
+
245
249
fn string_reader ( s : str ) -> reader {
246
250
ret new_reader ( new_byte_buf_reader ( str:: bytes ( s) ) ) ;
247
251
}
@@ -426,6 +430,12 @@ fn stderr() -> writer { ret new_writer(fd_buf_writer(2i32, option::none)); }
426
430
fn print ( s : str ) { stdout ( ) . write_str ( s) ; }
427
431
fn println ( s : str ) { stdout ( ) . write_str ( s + "\n " ) ; }
428
432
433
+ type bytes_writer =
434
+ obj {
435
+ fn get_writer ( ) -> writer ;
436
+ fn get_bytes ( ) -> [ mutable u8] ;
437
+ } ;
438
+
429
439
type str_writer =
430
440
obj {
431
441
fn get_writer ( ) -> writer ;
@@ -466,17 +476,26 @@ obj byte_buf_writer(buf: mutable_byte_buf) {
466
476
fn fsync ( _level : fsync:: level ) -> int { ret 0 ; }
467
477
}
468
478
469
- fn string_writer ( ) -> str_writer {
479
+ fn bytes_writer ( ) -> bytes_writer {
470
480
// FIXME: yikes, this is bad. Needs fixing of mutable syntax.
471
481
472
482
let b: [ mutable u8] = [ mutable 0u8 ] ;
473
483
vec:: pop ( b) ;
474
- let buf: mutable_byte_buf = @{ mutable buf: b, mutable pos: 0 u} ;
475
- obj str_writer_wrap ( wr: writer, buf: mutable_byte_buf) {
484
+ let buf = @{ mutable buf: b, mutable pos: 0 u} ;
485
+ obj byte_buf_writer_wrap ( wr: writer, buf: mutable_byte_buf) {
476
486
fn get_writer ( ) -> writer { ret wr; }
477
- fn get_str ( ) -> str { ret str:: unsafe_from_bytes ( buf. buf ) ; }
487
+ fn get_bytes ( ) -> [ mutable u8] { ret buf. buf ; }
488
+ }
489
+ ret byte_buf_writer_wrap ( new_writer ( byte_buf_writer ( buf) ) , buf) ;
490
+ }
491
+
492
+ fn string_writer ( ) -> str_writer {
493
+ let writer = bytes_writer ( ) ;
494
+ obj str_writer_wrap ( wr: bytes_writer) {
495
+ fn get_writer ( ) -> writer { wr. get_writer ( ) }
496
+ fn get_str ( ) -> str { str:: unsafe_from_bytes ( wr. get_bytes ( ) ) }
478
497
}
479
- ret str_writer_wrap ( new_writer ( byte_buf_writer ( buf ) ) , buf ) ;
498
+ str_writer_wrap ( writer )
480
499
}
481
500
482
501
0 commit comments