improve fast returns of find and rfind (#18127)

This commit is contained in:
n5m 2021-05-31 09:20:15 +00:00 • committed by GitHub
commit 064fe18de6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 1 deletions

View file

@ -1890,7 +1890,7 @@ func find*(s, sub: string, start: Natural = 0, last = 0): int {.rtl,
## See also:
## * `rfind func<#rfind,string,string,Natural>`_
## * `replace func<#replace,string,string,string>`_
if sub.len > s.len: return -1
if sub.len > s.len - start: return -1
if sub.len == 1: return find(s, sub[0], start, last)
template useSkipTable {.dirty.} =
@ -1967,6 +1967,8 @@ func rfind*(s, sub: string, start: Natural = 0, last = -1): int {.rtl,
## * `find func<#find,string,string,Natural,int>`_
if sub.len == 0:
return -1
if sub.len > s.len - start:
return -1
let last = if last == -1: s.high else: last
result = 0
for i in countdown(last - sub.len + 1, start):