diff options
| author | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2014-07-04 16:56:23 -0700 |
|---|---|---|
| committer | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2014-07-04 16:56:23 -0700 |
| commit | 67c8a8d5dd90e476d0579df3738fe1e744ef68f1 (patch) | |
| tree | 2a693c00dfe646cbe5cde68cc44b6c9156139018 /src | |
| parent | 717de500eefc2f501f12587fc9626944ab593ff8 (diff) | |
| download | rust-67c8a8d5dd90e476d0579df3738fe1e744ef68f1.tar.gz rust-67c8a8d5dd90e476d0579df3738fe1e744ef68f1.zip | |
serialize: speed up json pretty printing by batch writing spaces
Diffstat (limited to 'src')
| -rw-r--r-- | src/libserialize/json.rs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs index bb044f65348..36c8b308f41 100644 --- a/src/libserialize/json.rs +++ b/src/libserialize/json.rs @@ -299,11 +299,20 @@ fn escape_char(writer: &mut io::Writer, v: char) -> Result<(), io::IoError> { escape_bytes(writer, buf) } -fn spaces(writer: &mut io::Writer, n: uint) -> Result<(), io::IoError> { - for _ in range(0, n) { - try!(writer.write_str(" ")); +fn spaces(wr: &mut io::Writer, mut n: uint) -> Result<(), io::IoError> { + static len: uint = 16; + static buf: [u8, ..len] = [b' ', ..len]; + + while n >= len { + try!(wr.write(buf)); + n -= len; + } + + if n > 0 { + wr.write(buf.slice_to(n)) + } else { + Ok(()) } - Ok(()) } fn fmt_number_or_null(v: f64) -> String { |
