From: Joshua Simmons Date: Sun, 25 Sep 2022 15:10:09 +0000 (+0200) Subject: Improve perf of obj parser X-Git-Url: https://git.nega.tv//gitweb.cgi?a=commitdiff_plain;h=133d26904559903a392c6aaeb3d6990b59995b47;p=josh%2Fnarcissus Improve perf of obj parser --- diff --git a/narcissus-core/src/obj.rs b/narcissus-core/src/obj.rs index 64f0b38..5d9e80f 100644 --- a/narcissus-core/src/obj.rs +++ b/narcissus-core/src/obj.rs @@ -261,10 +261,34 @@ where let read = self.reader.read(&mut self.buf[self.cap..])?; self.cap += read; + const IS_NEWLINE_LUT: [bool; 256] = [ + false, false, false, false, false, false, false, false, false, false, true, false, + false, true, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, + ]; + for (i, &c) in self.buf[..self.cap].iter().enumerate() { - let is_newline = (c == b'\n') | (c == b'\r'); // skip empty lines - if (i - self.pos) > 1 && is_newline { + if IS_NEWLINE_LUT[c as usize] && (i - self.pos) > 1 { parse_line(&self.buf[self.pos..i], visitor)?; self.pos = i + 1; }