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.
This commit is contained in:
lit
2024-07-02 02:47:08 +08:00
committed by GitHub
parent 27abcdd57f
commit a557e5a341

View File

@@ -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)