diff options
author | superfunc <superfunc@users.noreply.github.com> | 2017-09-15 01:49:32 -0700 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-09-15 10:49:32 +0200 |
commit | d1f6ddfd6419a2f938e1ccef5efd658d6f3dcf75 (patch) | |
tree | 0f32ba2138f5c4d36638ba7e0c34e48c411aeb16 /lib/pure/collections/intsets.nim | |
parent | 387c88d87b69ff0dd6df5e77864ec6b4d54285fe (diff) | |
download | Nim-d1f6ddfd6419a2f938e1ccef5efd658d6f3dcf75.tar.gz |
Add counterpart to containsOrIncl for excl (#6360)
Diffstat (limited to 'lib/pure/collections/intsets.nim')
-rw-r--r-- | lib/pure/collections/intsets.nim | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/lib/pure/collections/intsets.nim b/lib/pure/collections/intsets.nim index 334e33f2e..085232564 100644 --- a/lib/pure/collections/intsets.nim +++ b/lib/pure/collections/intsets.nim @@ -131,8 +131,7 @@ proc incl*(s: var IntSet, key: int) = # fall through: bitincl(s, key) -proc excl*(s: var IntSet, key: int) = - ## excludes `key` from the set `s`. +proc exclImpl(s: var IntSet, key: int) = if s.elems <= s.a.len: for i in 0..<s.elems: if s.a[i] == key: @@ -146,6 +145,17 @@ proc excl*(s: var IntSet, key: int) = t.bits[`shr`(u, IntShift)] = t.bits[`shr`(u, IntShift)] and not `shl`(1, u and IntMask) +proc excl*(s: var IntSet, key: int) = + ## excludes `key` from the set `s`. + exclImpl(s, key) + +proc missingOrExcl*(s: var IntSet, key: int) : bool = + ## returns true if `s` does not contain `key`, otherwise + ## `key` is removed from `s` and false is returned. + var count = s.elems + exclImpl(s, key) + result = count == s.elems + proc containsOrIncl*(s: var IntSet, key: int): bool = ## returns true if `s` contains `key`, otherwise `key` is included in `s` ## and false is returned. @@ -270,6 +280,17 @@ when isMainModule: x.incl(7) x.incl(1056) + x.incl(1044) + x.excl(1044) + + assert x.containsOrIncl(888) == false + assert 888 in x + assert x.containsOrIncl(888) == true + + assert x.missingOrExcl(888) == false + assert 888 notin x + assert x.missingOrExcl(888) == true + var xs = toSeq(items(x)) xs.sort(cmp[int]) assert xs == @[1, 2, 7, 1056] |