From a557e5a341edcba90a08b6bc07d1dd701ed29c81 Mon Sep 17 00:00:00 2001 From: lit Date: Tue, 2 Jul 2024 02:47:08 +0800 Subject: [PATCH] refine: strmisc.expandTabs better code structure (#23783) After this pr, for a string with just 20 length and 6 `'\t'`, the time reduces by about 1.5%[^t]. Also, the code is clearer than the previous at some places. [^t]: Generally speaking, this rate increases with length. I may test for longer string later. --- lib/pure/strmisc.nim | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/pure/strmisc.nim b/lib/pure/strmisc.nim index c8cd839be2..a3e539e7e2 100644 --- a/lib/pure/strmisc.nim +++ b/lib/pure/strmisc.nim @@ -27,20 +27,17 @@ func expandTabs*(s: string, tabSize: int = 8): string = doAssert expandTabs("a\tb\n\txy\t", 3) == "a b\n xy " result = newStringOfCap(s.len + s.len shr 2) - var pos = 0 template addSpaces(n) = - for j in 0 ..< n: + for _ in 1..n: result.add(' ') - pos += 1 + pos += n - for i in 0 ..< len(s): - let c = s[i] + var pos = 0 + let denominator = if tabSize > 0: tabSize else: 1 + for c in s: if c == '\t': - let - denominator = if tabSize > 0: tabSize else: 1 - numSpaces = tabSize - pos mod denominator - + let numSpaces = tabSize - pos mod denominator addSpaces(numSpaces) else: result.add(c)