From 195b23b34fe10bac94043650bdf806b51f949023 Mon Sep 17 00:00:00 2001 From: Gareth Smith Date: Sat, 4 Jan 2014 13:26:03 +0000 Subject: [PATCH] Restore Writer.write_char, see #10861. --- src/libstd/io/mem.rs | 10 ++++++++++ src/libstd/io/mod.rs | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/src/libstd/io/mem.rs b/src/libstd/io/mem.rs index 5096e9237e3..aaba3232aa0 100644 --- a/src/libstd/io/mem.rs +++ b/src/libstd/io/mem.rs @@ -419,6 +419,16 @@ mod test { assert_eq!(r.read_to_str(), ~"testingtesting\ntesting"); } + #[test] + fn test_write_char() { + let mut writer = MemWriter::new(); + writer.write_char('a'); + writer.write_char('\n'); + writer.write_char('ệ'); + let mut r = BufReader::new(*writer.inner_ref()); + assert_eq!(r.read_to_str(), ~"a\nệ"); + } + #[test] fn test_read_whole_string_bad() { let buf = [0xff]; diff --git a/src/libstd/io/mod.rs b/src/libstd/io/mod.rs index 53b25f6fe98..a7b443b1d41 100644 --- a/src/libstd/io/mod.rs +++ b/src/libstd/io/mod.rs @@ -284,6 +284,7 @@ Out of scope #[allow(missing_doc)]; use cast; +use char::Char; use condition::Guard; use container::Container; use int; @@ -902,6 +903,13 @@ pub trait Writer { self.write(['\n' as u8]); } + /// Write a single char, encoded as UTF-8. + fn write_char(&mut self, c: char) { + let mut buf = [0u8, ..4]; + let n = c.encode_utf8(buf.as_mut_slice()); + self.write(buf.slice_to(n)); + } + /// Write the result of passing n through `int::to_str_bytes`. fn write_int(&mut self, n: int) { int::to_str_bytes(n, 10u, |bytes| self.write(bytes))