The packedsets module implements an efficient Ordinal set implemented as a sparse bit set.
Supports any Ordinal type.
proc `*`[A](s1, s2: PackedSet[A]): PackedSet[A] {.inline.}proc `+`[A](s1, s2: PackedSet[A]): PackedSet[A] {.inline.}proc `-`[A](s1, s2: PackedSet[A]): PackedSet[A] {.inline.}proc `<`[A](s1, s2: PackedSet[A]): bool
Returns true if s1 is a proper subset of s2.
A strict or proper subset s1 has all of its elements in s2, but s2 has more elements than s1.
Example:
let a = [1].toPackedSet b = [1, 2].toPackedSet c = [1, 3].toPackedSet assert a < b assert not (b < b) assert not (c < b)Source Edit
proc `<=`[A](s1, s2: PackedSet[A]): bool
Returns true if s1 is a subset of s2.
A subset s1 has all of its elements in s2, but s2 doesn't necessarily have more elements than s1. That is, s1 can be equal to s2.
Example:
let a = [1].toPackedSet b = [1, 2].toPackedSet c = [1, 3].toPackedSet assert a <= b assert b <= b assert not (c <= b)Source Edit
proc `=copy`[A](dest: var PackedSet[A]; src: PackedSet[A])
src to dest. dest does not need to be initialized by the initPackedSet proc. Source Edit proc assign[A](dest: var PackedSet[A]; src: PackedSet[A]) {.inline, ...deprecated.}src to dest. dest does not need to be initialized by the initPackedSet proc. Example:
var a = initPackedSet[int]() b = initPackedSet[int]() b.incl(5) b.incl(7) a.assign(b) assert len(a) == 2Source Edit
proc card[A](s: PackedSet[A]): int {.inline.}Alias for len().
Card stands for the cardinality of a set.
Source Editproc contains[A](s: PackedSet[A]; key: A): bool
Returns true if key is in s.
This allows the usage of the in operator.
Example:
type ABCD = enum A, B, C, D let a = [1, 3, 5].toPackedSet assert a.contains(3) assert 3 in a assert not a.contains(8) assert 8 notin a let letters = [A, C].toPackedSet assert A in letters assert C in letters assert B notin lettersSource Edit
proc containsOrIncl[A](s: var PackedSet[A]; key: A): bool
Includes key in the set s and tells if key was already in s.
The difference with regards to the incl proc is that this proc returns true if s already contained key. The proc will return false if key was added as a new value to s during this call.
See also:
Example:
var a = initPackedSet[int]() assert a.containsOrIncl(3) == false assert a.containsOrIncl(3) == true assert a.containsOrIncl(4) == falseSource Edit
proc excl[A](s: var PackedSet[A]; key: A)
Excludes key from the set s.
This doesn't do anything if key is not found in s.
See also:
Example:
var a = [3].toPackedSet a.excl(3) a.excl(3) a.excl(99) assert len(a) == 0Source Edit
proc excl[A](s: var PackedSet[A]; other: PackedSet[A])
Excludes all elements from other from s.
This is the in-place version of s - other.
See also:
Example:
var a = [1, 5].toPackedSet a.excl([5].toPackedSet) assert len(a) == 1 assert 5 notin aSource Edit
proc incl[A](s: var PackedSet[A]; key: A)
Includes an element key in s.
This doesn't do anything if key is already in s.
See also:
Example:
var a = initPackedSet[int]() a.incl(3) a.incl(3) assert len(a) == 1Source Edit
proc incl[A](s: var PackedSet[A]; other: PackedSet[A])
Includes all elements from other into s.
This is the in-place version of s + other.
See also:
Example:
var a = [1].toPackedSet a.incl([5].toPackedSet) assert len(a) == 2 assert 5 in aSource Edit
proc missingOrExcl[A](s: var PackedSet[A]; key: A): bool
Excludes key from the set s and tells if key was already missing from s.
The difference with regards to the excl proc is that this proc returns true if key was missing from s. The proc will return false if key was in s and it was removed during this call.
See also:
Example:
var a = [5].toPackedSet assert a.missingOrExcl(5) == false assert a.missingOrExcl(5) == trueSource Edit
© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/packedsets.html