Skip to content

Commit 50c4328

Browse files
authored
Merge pull request #1178 from iex-rs/tiny-bit-faster-hex
Optimize Unicode decoding by 1% 🤡
2 parents 6130f9b + 9ffb43a commit 50c4328

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

src/read.rs

+10-8
Original file line numberDiff line numberDiff line change
@@ -1055,15 +1055,17 @@ static HEX0: [i16; 256] = build_hex_table(0);
10551055
static HEX1: [i16; 256] = build_hex_table(4);
10561056

10571057
fn decode_four_hex_digits(a: u8, b: u8, c: u8, d: u8) -> Option<u16> {
1058-
let a = HEX1[a as usize];
1059-
let b = HEX0[b as usize];
1060-
let c = HEX1[c as usize];
1061-
let d = HEX0[d as usize];
1058+
let a = HEX1[a as usize] as i32;
1059+
let b = HEX0[b as usize] as i32;
1060+
let c = HEX1[c as usize] as i32;
1061+
let d = HEX0[d as usize] as i32;
1062+
1063+
let codepoint = ((a | b) << 8) | c | d;
10621064

10631065
// A single sign bit check.
1064-
if (a | b | c | d) < 0 {
1065-
return None;
1066+
if codepoint >= 0 {
1067+
Some(codepoint as u16)
1068+
} else {
1069+
None
10661070
}
1067-
1068-
Some((((a | b) << 8) | c | d) as u16)
10691071
}

0 commit comments

Comments
 (0)