From 9ca1c2c93035341e06d85f56edeb6a08f962a9e8 Mon Sep 17 00:00:00 2001 From: Flaviu Tamas Date: Sun, 28 Oct 2018 00:52:49 -0400 Subject: Eliminate floating point arithmatic in nre Integer division is already hard enough on your CPU, using floating point here is WAY slower and can just as effectivly be done using integers. This is important because matchImpl tends to be in the center of very hot loops (like split()). --- lib/impure/nre.nim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/impure/nre.nim b/lib/impure/nre.nim index ce3fb2aff..5155194b0 100644 --- a/lib/impure/nre.nim +++ b/lib/impure/nre.nim @@ -469,7 +469,8 @@ proc matchImpl(str: string, pattern: Regex, start, endpos: int, flags: int): Opt # 1x capture count as slack space for PCRE let vecsize = (pattern.captureCount() + 1) * 3 # div 2 because each element is 2 cints long - myResult.pcreMatchBounds = newSeq[HSlice[cint, cint]](ceil(vecsize / 2).int) + # plus 1 because we need the ceiling, not the floor + myResult.pcreMatchBounds = newSeq[HSlice[cint, cint]]((vecsize div 2) + 1) myResult.pcreMatchBounds.setLen(vecsize div 3) let strlen = if endpos == int.high: str.len else: endpos+1 -- cgit 1.4.1-2-gfad0