Skip to content

Commit 5b7ef2f

Browse files
committed
---
yaml --- r: 6955 b: refs/heads/master c: b6cecdd h: refs/heads/master i: 6953: 23403bd 6951: 25ded9a v: v3
1 parent 938c79b commit 5b7ef2f

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 1f0757c684b11d56519ffe006ce7be891b3eb940
2+
refs/heads/master: b6cecdd4de2824b3f07c2c7126300479037f0b3b

trunk/src/libstd/io.rs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,10 @@ fn new_byte_buf_reader(buf: [u8]) -> buf_reader {
242242
ret byte_buf_reader(@{buf: buf, mutable pos: 0u});
243243
}
244244

245+
fn bytes_reader(bytes: [u8]) -> reader {
246+
ret new_reader(new_byte_buf_reader(bytes));
247+
}
248+
245249
fn string_reader(s: str) -> reader {
246250
ret new_reader(new_byte_buf_reader(str::bytes(s)));
247251
}
@@ -426,6 +430,12 @@ fn stderr() -> writer { ret new_writer(fd_buf_writer(2i32, option::none)); }
426430
fn print(s: str) { stdout().write_str(s); }
427431
fn println(s: str) { stdout().write_str(s + "\n"); }
428432

433+
type bytes_writer =
434+
obj {
435+
fn get_writer() -> writer;
436+
fn get_bytes() -> [mutable u8];
437+
};
438+
429439
type str_writer =
430440
obj {
431441
fn get_writer() -> writer;
@@ -466,17 +476,26 @@ obj byte_buf_writer(buf: mutable_byte_buf) {
466476
fn fsync(_level: fsync::level) -> int { ret 0; }
467477
}
468478

469-
fn string_writer() -> str_writer {
479+
fn bytes_writer() -> bytes_writer {
470480
// FIXME: yikes, this is bad. Needs fixing of mutable syntax.
471481

472482
let b: [mutable u8] = [mutable 0u8];
473483
vec::pop(b);
474-
let buf: mutable_byte_buf = @{mutable buf: b, mutable pos: 0u};
475-
obj str_writer_wrap(wr: writer, buf: mutable_byte_buf) {
484+
let buf = @{mutable buf: b, mutable pos: 0u};
485+
obj byte_buf_writer_wrap(wr: writer, buf: mutable_byte_buf) {
476486
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()) }
478497
}
479-
ret str_writer_wrap(new_writer(byte_buf_writer(buf)), buf);
498+
str_writer_wrap(writer)
480499
}
481500

482501

0 commit comments

Comments
 (0)