From 5bfea58ffb9fd731131bbbd3f3d077cb69c5f419 Mon Sep 17 00:00:00 2001 From: def Date: Mon, 14 Jul 2014 15:03:09 +0200 Subject: Add missing difference and to sets module --- lib/pure/collections/sets.nim | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'lib/pure/collections') diff --git a/lib/pure/collections/sets.nim b/lib/pure/collections/sets.nim index 4ba67cb2e..2f0c4d3d2 100644 --- a/lib/pure/collections/sets.nim +++ b/lib/pure/collections/sets.nim @@ -167,6 +167,12 @@ proc intersection*[A](s1, s2: TSet[A]): TSet[A] = for item in s1: if item in s2: incl(result, item) +proc difference*[A](s1, s2: TSet[A]): TSet[A] = + ## returns a new set of all items that are contained in `s1`, but not in `s2` + result = s1 + for item in s2: + if contains(result, item): excl(result, item) + proc symmetricDifference*[A](s1, s2: TSet[A]): TSet[A] = ## returns a new set of all items that are contained in either ## `s1` or `s2`, but not both @@ -182,6 +188,10 @@ proc `*`*[A](s1, s2: TSet[A]): TSet[A] {.inline.} = ## alias for `intersection` result = intersection(s1, s2) +proc `-`*[A](s1, s2: TSet[A]): TSet[A] {.inline.} = + ## alias for `difference` + result = difference(s1, s2) + proc `-+-`*[A](s1, s2: TSet[A]): TSet[A] {.inline.} = ## alias for `symmetricDifference` result = symmetricDifference(s1, s2) -- cgit 1.4.1-2-gfad0 From 68c3c8ebfafbcd169bceaf2bebed8f7af8dbf124 Mon Sep 17 00:00:00 2001 From: def Date: Mon, 14 Jul 2014 17:56:19 +0200 Subject: More effificent TSet difference --- lib/pure/collections/sets.nim | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'lib/pure/collections') diff --git a/lib/pure/collections/sets.nim b/lib/pure/collections/sets.nim index 2f0c4d3d2..f1eed0004 100644 --- a/lib/pure/collections/sets.nim +++ b/lib/pure/collections/sets.nim @@ -169,9 +169,10 @@ proc intersection*[A](s1, s2: TSet[A]): TSet[A] = proc difference*[A](s1, s2: TSet[A]): TSet[A] = ## returns a new set of all items that are contained in `s1`, but not in `s2` - result = s1 - for item in s2: - if contains(result, item): excl(result, item) + result = initSet[A]() + for item in s1: + if not contains(s2, item): + incl(result, item) proc symmetricDifference*[A](s1, s2: TSet[A]): TSet[A] = ## returns a new set of all items that are contained in either -- cgit 1.4.1-2-gfad0