Skip to content

Commit 64a2d76

Browse files
committed
parser: Use a lookup table for Delimiter::from_byte.
It's faster.
1 parent d5631d8 commit 64a2d76

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/parser.rs

+14-8
Original file line numberDiff line numberDiff line change
@@ -314,15 +314,21 @@ impl Delimiters {
314314

315315
#[inline]
316316
fn from_byte(byte: Option<u8>) -> Delimiters {
317+
const TABLE: [Delimiters; 255] = {
318+
let mut table = [Delimiter::None; 255];
319+
table[b';' as usize] = Delimiter::Semicolon;
320+
table[b'!' as usize] = Delimiter::Bang;
321+
table[b',' as usize] = Delimiter::Comma;
322+
table[b'{' as usize] = Delimiter::CurlyBracketBlock;
323+
table[b'}' as usize] = ClosingDelimiter::CloseCurlyBracket;
324+
table[b']' as usize] = ClosingDelimiter::CloseSquareBracket;
325+
table[b')' as usize] = ClosingDelimiter::CloseParenthesis;
326+
table
327+
};
328+
317329
match byte {
318-
Some(b';') => Delimiter::Semicolon,
319-
Some(b'!') => Delimiter::Bang,
320-
Some(b',') => Delimiter::Comma,
321-
Some(b'{') => Delimiter::CurlyBracketBlock,
322-
Some(b'}') => ClosingDelimiter::CloseCurlyBracket,
323-
Some(b']') => ClosingDelimiter::CloseSquareBracket,
324-
Some(b')') => ClosingDelimiter::CloseParenthesis,
325-
_ => Delimiter::None,
330+
None => Delimiter::None,
331+
Some(b) => TABLE[b as usize],
326332
}
327333
}
328334
}

0 commit comments

Comments
 (0)