mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-06 07:38:24 +00:00
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user