diff options
author | Araq <rumpf_a@web.de> | 2012-08-20 21:59:59 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2012-08-20 21:59:59 +0200 |
commit | e17a778d56f17d5ac92e8ad8115fdb1ceb727336 (patch) | |
tree | fc05fe64a90f4bce88e59c51e9aaf3daddfb57dc /lib/pure | |
parent | 5a4659c147db5a8f25d809ae4d792448437862e1 (diff) | |
parent | 6c6dfff4e90fba5cfda70f1a210552f32f134480 (diff) | |
download | Nim-e17a778d56f17d5ac92e8ad8115fdb1ceb727336.tar.gz |
Merge branch 'master' of github.com:Araq/Nimrod
Diffstat (limited to 'lib/pure')
-rwxr-xr-x | lib/pure/os.nim | 2 | ||||
-rwxr-xr-x | lib/pure/streams.nim | 2 | ||||
-rwxr-xr-x | lib/pure/strutils.nim | 14 |
3 files changed, 16 insertions, 2 deletions
diff --git a/lib/pure/os.nim b/lib/pure/os.nim index 5ec46d6b7..5a298db5b 100755 --- a/lib/pure/os.nim +++ b/lib/pure/os.nim @@ -411,7 +411,7 @@ proc JoinPath*(head, tail: string): string {. else: result = head & DirSep & tail -proc JoinPath*(parts: openarray[string]): string {.noSideEffect, +proc JoinPath*(parts: varargs[string]): string {.noSideEffect, rtl, extern: "nos$1OpenArray".} = ## The same as `JoinPath(head, tail)`, but works with any number ## of directory parts. diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim index 6e2e19be5..4cd48af31 100755 --- a/lib/pure/streams.nim +++ b/lib/pure/streams.nim @@ -194,7 +194,7 @@ proc ssAtEnd(s: PStream): bool = proc ssSetPosition(s: PStream, pos: int) = var s = PStringStream(s) - s.pos = min(pos, s.data.len-1) + s.pos = clamp(pos, 0, s.data.high) proc ssGetPosition(s: PStream): int = var s = PStringStream(s) diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim index 2509bf689..0f11b4d89 100755 --- a/lib/pure/strutils.nim +++ b/lib/pure/strutils.nim @@ -654,6 +654,20 @@ proc find*(s: string, chars: set[char], start: int = 0): int {.noSideEffect, for i in start..s.len-1: if s[i] in chars: return i return -1 + +proc rfind*(s, sub: string, start: int = -1): int {.noSideEffect.} = + ## Searches for `sub` in `s` in reverse, starting at `start` and going + ## backwards to 0. Searching is case-sensitive. If `sub` is not in `s`, -1 is + ## returned. + let realStart = if start == -1: s.len else: start + for i in countdown(realStart-sub.len, 0): + for j in 0..sub.len-1: + result = i + if sub[j] != s[i+j]: + result = -1 + break + if result != -1: return + return -1 proc quoteIfContainsWhite*(s: string): string = ## returns ``'"' & s & '"'`` if `s` contains a space and does not |