diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-11 05:00:49 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-11 05:00:49 -0500 |
commit | c61c85a7985358d726cc0ba0649ce9b269b62d5c (patch) | |
tree | e26d6e4964e2845fbadc7381ecf4a1f5d2e18ce7 /src/row.rs | |
parent | 805f9348bfdbfea6cc48e2f03946ec84de4a3c53 (diff) | |
download | vt100-rust-c61c85a7985358d726cc0ba0649ce9b269b62d5c.tar.gz vt100-rust-c61c85a7985358d726cc0ba0649ce9b269b62d5c.zip |
stop using formats at all
they are too slow
Diffstat (limited to 'src/row.rs')
-rw-r--r-- | src/row.rs | 70 |
1 files changed, 15 insertions, 55 deletions
@@ -1,5 +1,5 @@ +use crate::term::BufWrite as _; use std::convert::TryInto as _; -use std::io::Write as _; #[derive(Clone, Debug)] pub struct Row { @@ -87,8 +87,6 @@ impl Row { } if cell.has_contents() { - // using write! here is significantly slower, for some reason - // write!(contents, "{}", cell.contents()).unwrap(); contents.push_str(&cell.contents()); } else { contents.push(' '); @@ -135,26 +133,15 @@ impl Row { || prev_pos.col != self.cols() || pos.col != 0 { - write!( - contents, - "{}{}", - crate::term::CRLF::default(), - crate::term::MoveRight::new(pos.col) - ) - .unwrap(); + crate::term::CRLF::default().write_buf(contents); + crate::term::MoveRight::new(pos.col) + .write_buf(contents); } } else if prev_pos.row == pos.row { - write!( - contents, - "{}", - crate::term::MoveRight::new( - pos.col - prev_pos.col - ) - ) - .unwrap(); + crate::term::MoveRight::new(pos.col - prev_pos.col) + .write_buf(contents); } else { - write!(contents, "{}", crate::term::MoveTo::new(pos)) - .unwrap(); + crate::term::MoveTo::new(pos).write_buf(contents); } prev_pos = pos; } @@ -167,9 +154,6 @@ impl Row { prev_attrs = *attrs; } - // using write! here is significantly slower, for some - // reason - // write!(contents, "{}", cell.contents()).unwrap(); contents.extend(cell.contents().as_bytes()); prev_pos.col += if cell.is_wide() { 2 } else { 1 }; } else { @@ -178,12 +162,7 @@ impl Row { prev_attrs = *attrs; } - write!( - contents, - "{}", - crate::term::EraseChar::default(), - ) - .unwrap(); + crate::term::EraseChar::default().write_buf(contents); } } } @@ -228,28 +207,17 @@ impl Row { || prev_pos.col != self.cols() || pos.col != 0 { - write!( - contents, - "{}{}", - crate::term::CRLF::default(), - crate::term::MoveRight::new(pos.col) - ) - .unwrap(); + crate::term::CRLF::default().write_buf(contents); + crate::term::MoveRight::new(pos.col) + .write_buf(contents); } } else if prev_pos.row == pos.row && prev_pos.col < pos.col { - write!( - contents, - "{}", - crate::term::MoveRight::new( - pos.col - prev_pos.col - ) - ) - .unwrap(); + crate::term::MoveRight::new(pos.col - prev_pos.col) + .write_buf(contents); } else { - write!(contents, "{}", crate::term::MoveTo::new(pos)) - .unwrap(); + crate::term::MoveTo::new(pos).write_buf(contents); } prev_pos = pos; } @@ -262,9 +230,6 @@ impl Row { prev_attrs = *attrs; } - // using write! here is significantly slower, for some - // reason - // write!(contents, "{}", cell.contents()).unwrap(); contents.extend(cell.contents().as_bytes()); prev_pos.col += if cell.is_wide() { 2 } else { 1 }; } else { @@ -273,12 +238,7 @@ impl Row { prev_attrs = *attrs; } - write!( - contents, - "{}", - crate::term::EraseChar::default(), - ) - .unwrap(); + crate::term::EraseChar::default().write_buf(contents); } } } |