summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authordef <dennis@felsin9.de>2014-07-28 16:48:07 +0200
committerdef <dennis@felsin9.de>2014-07-28 16:48:21 +0200
commitc78b1070a8dec61ae6aa660fe724bf9fb67fb6a9 (patch)
treef6c0eb27f4443df941c2dce2e1f00b90fffef3a8 /lib/pure
parent72dbd12ca43682318ea16153980a0a2bdc602b92 (diff)
downloadNim-c78b1070a8dec61ae6aa660fe724bf9fb67fb6a9.tar.gz
overlapping as a parameter for count instead
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/strutils.nim26
1 files changed, 9 insertions, 17 deletions
diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim
index acb803a4c..1d17de233 100644
--- a/lib/pure/strutils.nim
+++ b/lib/pure/strutils.nim
@@ -803,16 +803,20 @@ proc rfind*(s, sub: string, start: int = -1): int {.noSideEffect.} =
     if result != -1: return
   return -1
 
-proc count*(s: string, sub: string): int {.noSideEffect,
+proc count*(s: string, sub: string, overlapping: bool = false): int {.noSideEffect,
   rtl, extern: "nsuCountString".} =
-  ## Count the occurences of a substring `sub` in the string `s`. Overlapping
-  ## occurences of `sub` do not count.
+  ## Count the occurences of a substring `sub` in the string `s`.
+  ## Overlapping occurences of `sub` only count when `overlapping`
+  ## is set to true.
   var i = 0
   while true:
     i = s.find(sub, i)
     if i < 0:
       break
-    i += sub.len
+    if overlapping:
+      inc i
+    else:
+      i += sub.len
     inc result
 
 proc count*(s: string, sub: char): int {.noSideEffect,
@@ -829,18 +833,6 @@ proc count*(s: string, subs: set[char]): int {.noSideEffect,
     if c in subs:
       inc result
 
-proc countOverlapping*(s: string, sub: string): int {.noSideEffect,
-  rtl, extern: "nsuCountOverlapping".} =
-  ## Count the occurences of a substring `sub` in the string `s`. Overlapping
-  ## occurences of `sub` do count.
-  var i = 0
-  while true:
-    i = s.find(sub, i)
-    if i < 0:
-      break
-    inc i
-    inc result
-
 proc quoteIfContainsWhite*(s: string): string {.deprecated.} =
   ## Returns ``'"' & s & '"'`` if `s` contains a space and does not
   ## start with a quote, else returns `s`.
@@ -1394,6 +1386,6 @@ when isMainModule:
   doAssert parseEnum("invalid enum value", enC) == enC
 
   doAssert count("foofoofoo", "foofoo") == 1
-  doAssert countOverlapping("foofoofoo", "foofoo") == 2
+  doAssert count("foofoofoo", "foofoo", overlapping = true) == 2
   doAssert count("foofoofoo", 'f') == 3
   doAssert count("foofoofoobar", {'f','b'}) == 4