optimize Cstr/EscapeAscii display

old:
    ascii::bench_ascii_escape_display_mixed      17.97µs/iter +/- 204.00ns
    ascii::bench_ascii_escape_display_no_escape 545.00ns/iter   +/- 6.00ns
new:
    ascii::bench_ascii_escape_display_mixed      4.99µs/iter +/- 56.00ns
    ascii::bench_ascii_escape_display_no_escape 91.00ns/iter  +/- 1.00ns
This commit is contained in:
The 8472
2023-06-21 20:49:18 +02:00
parent 5ea6668646
commit 6c87448b57
7 changed files with 105 additions and 1 deletions

View File

@@ -96,6 +96,17 @@ pub fn escape_default(c: u8) -> EscapeDefault {
EscapeDefault(escape::EscapeIterInner::new(data, range))
}
impl EscapeDefault {
pub(crate) fn empty() -> Self {
let data = [Char::Null; 4];
EscapeDefault(escape::EscapeIterInner::new(data, 0..0))
}
pub(crate) fn as_str(&self) -> &str {
self.0.as_str()
}
}
#[stable(feature = "rust1", since = "1.0.0")]
impl Iterator for EscapeDefault {
type Item = u8;