mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 15:23:46 +00:00
Optimize ascii::escape_default by using a digit LUT
This commit is contained in:
parent
10dccdc7fc
commit
876142417c
@ -98,15 +98,23 @@ pub fn escape_default(c: u8) -> EscapeDefault {
|
|||||||
b'\'' => ([b'\\', b'\'', 0, 0], 2),
|
b'\'' => ([b'\\', b'\'', 0, 0], 2),
|
||||||
b'"' => ([b'\\', b'"', 0, 0], 2),
|
b'"' => ([b'\\', b'"', 0, 0], 2),
|
||||||
b'\x20'..=b'\x7e' => ([c, 0, 0, 0], 1),
|
b'\x20'..=b'\x7e' => ([c, 0, 0, 0], 1),
|
||||||
_ => ([b'\\', b'x', hexify(c >> 4), hexify(c & 0xf)], 4),
|
_ => {
|
||||||
|
let (b1, b2) = hexify(c);
|
||||||
|
([b'\\', b'x', b1, b2], 4)
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return EscapeDefault { range: 0..len, data };
|
return EscapeDefault { range: 0..len, data };
|
||||||
|
|
||||||
fn hexify(b: u8) -> u8 {
|
#[inline]
|
||||||
match b {
|
fn hexify(b: u8) -> (u8, u8) {
|
||||||
0..=9 => b'0' + b,
|
let hex_digits: &[u8; 16] = b"0123456789abcdef";
|
||||||
_ => b'a' + b - 10,
|
// SAFETY: For all n: u8, n >> 4 < 16 and n & 0xf < 16
|
||||||
|
unsafe {
|
||||||
|
(
|
||||||
|
*hex_digits.get_unchecked((b >> 4) as usize),
|
||||||
|
*hex_digits.get_unchecked((b & 0xf) as usize),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user