ORC and stdlib optimizations (#15362)
This commit is contained in:
parent
8ae4a774b7
commit
9a34009f00
6 changed files with 45 additions and 29 deletions
|
|
@ -310,6 +310,10 @@ proc skipWhile*(s: string, toSkip: set[char], start = 0): int {.inline.} =
|
|||
result = 0
|
||||
while start+result < s.len and s[result+start] in toSkip: inc(result)
|
||||
|
||||
proc fastSubstr(s: string; token: var string; start, length: int) =
|
||||
token.setLen length
|
||||
for i in 0 ..< length: token[i] = s[i+start]
|
||||
|
||||
proc parseUntil*(s: string, token: var string, until: set[char],
|
||||
start = 0): int {.inline.} =
|
||||
## Parses a token and stores it in ``token``. Returns
|
||||
|
|
@ -326,7 +330,8 @@ proc parseUntil*(s: string, token: var string, until: set[char],
|
|||
var i = start
|
||||
while i < s.len and s[i] notin until: inc(i)
|
||||
result = i-start
|
||||
token = substr(s, start, i-1)
|
||||
fastSubstr(s, token, start, result)
|
||||
#token = substr(s, start, i-1)
|
||||
|
||||
proc parseUntil*(s: string, token: var string, until: char,
|
||||
start = 0): int {.inline.} =
|
||||
|
|
@ -344,7 +349,8 @@ proc parseUntil*(s: string, token: var string, until: char,
|
|||
var i = start
|
||||
while i < s.len and s[i] != until: inc(i)
|
||||
result = i-start
|
||||
token = substr(s, start, i-1)
|
||||
fastSubstr(s, token, start, result)
|
||||
#token = substr(s, start, i-1)
|
||||
|
||||
proc parseUntil*(s: string, token: var string, until: string,
|
||||
start = 0): int {.inline.} =
|
||||
|
|
@ -370,7 +376,8 @@ proc parseUntil*(s: string, token: var string, until: string,
|
|||
if u >= until.len: break
|
||||
inc(i)
|
||||
result = i-start
|
||||
token = substr(s, start, i-1)
|
||||
fastSubstr(s, token, start, result)
|
||||
#token = substr(s, start, i-1)
|
||||
|
||||
proc parseWhile*(s: string, token: var string, validChars: set[char],
|
||||
start = 0): int {.inline.} =
|
||||
|
|
@ -386,7 +393,8 @@ proc parseWhile*(s: string, token: var string, validChars: set[char],
|
|||
var i = start
|
||||
while i < s.len and s[i] in validChars: inc(i)
|
||||
result = i-start
|
||||
token = substr(s, start, i-1)
|
||||
fastSubstr(s, token, start, result)
|
||||
#token = substr(s, start, i-1)
|
||||
|
||||
proc captureBetween*(s: string, first: char, second = '\0', start = 0): string =
|
||||
## Finds the first occurrence of ``first``, then returns everything from there
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue