summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2012-08-20 21:59:59 +0200
committerAraq <rumpf_a@web.de>2012-08-20 21:59:59 +0200
commite17a778d56f17d5ac92e8ad8115fdb1ceb727336 (patch)
treefc05fe64a90f4bce88e59c51e9aaf3daddfb57dc /lib/pure
parent5a4659c147db5a8f25d809ae4d792448437862e1 (diff)
parent6c6dfff4e90fba5cfda70f1a210552f32f134480 (diff)
downloadNim-e17a778d56f17d5ac92e8ad8115fdb1ceb727336.tar.gz
Merge branch 'master' of github.com:Araq/Nimrod
Diffstat (limited to 'lib/pure')
-rwxr-xr-xlib/pure/os.nim2
-rwxr-xr-xlib/pure/streams.nim2
-rwxr-xr-xlib/pure/strutils.nim14
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