summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2012-08-19 13:00:28 +0100
committerDominik Picheta <dominikpicheta@googlemail.com>2012-08-19 13:00:28 +0100
commit6c6dfff4e90fba5cfda70f1a210552f32f134480 (patch)
treeba051c029d0e577eb6a92c0f62ec2711143cdf1c
parent3a4e22de33754c8f0ee48892d45a7f1057ee3300 (diff)
downloadNim-6c6dfff4e90fba5cfda70f1a210552f32f134480.tar.gz
Added strutils.rfind.
-rwxr-xr-xlib/pure/strutils.nim14
1 files changed, 14 insertions, 0 deletions
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