aboutsummaryrefslogtreecommitdiff
path: root/sets.go
diff options
context:
space:
mode:
authorOskar Haarklou Veileborg <ohv1020@hotmail.com>2023-01-09 20:28:08 +0100
committerOskar Haarklou Veileborg <ohv1020@hotmail.com>2023-01-09 20:28:08 +0100
commit8e1383ea6a9561610e00b8c7f401bca1257f9001 (patch)
tree3ce620c77162717648feb4ae411b6a63acb0f2e3 /sets.go
parentMerge pull request #35 from laher/sets-maps-append-multi (diff)
downloadpds-8e1383ea6a9561610e00b8c7f401bca1257f9001.tar.gz
pds-8e1383ea6a9561610e00b8c7f401bca1257f9001.tar.xz
Ensure immutability of sets (and maps with SetMany)
Diffstat (limited to 'sets.go')
-rw-r--r--sets.go32
1 files changed, 10 insertions, 22 deletions
diff --git a/sets.go b/sets.go
index fc30ffb..28f888d 100644
--- a/sets.go
+++ b/sets.go
@@ -18,7 +18,7 @@ func NewSet[T comparable](hasher Hasher[T], values ...T) Set[T] {
m: NewMap[T, struct{}](hasher),
}
for _, value := range values {
- s.m.set(value, struct{}{}, true)
+ s.m = s.m.set(value, struct{}{}, true)
}
return s
}
@@ -27,24 +27,18 @@ func NewSet[T comparable](hasher Hasher[T], values ...T) Set[T] {
//
// This function will return a new set even if the set already contains the value.
func (s Set[T]) Set(values ...T) Set[T] {
- n := Set[T]{
- m: s.m.clone(),
- }
for _, value := range values {
- n.m.set(value, struct{}{}, true)
+ s.m = s.m.Set(value, struct{}{})
}
- return n
+ return s
}
// Delete returns a set with the given key removed.
func (s Set[T]) Delete(values ...T) Set[T] {
- n := Set[T]{
- m: s.m.clone(),
- }
for _, value := range values {
- n.m.delete(value, true)
+ s.m = s.m.Delete(value)
}
- return n
+ return s
}
// Has returns true when the set contains the given value
@@ -137,7 +131,7 @@ func NewSortedSet[T comparable](comparer Comparer[T], values ...T) SortedSet[T]
m: NewSortedMap[T, struct{}](comparer),
}
for _, value := range values {
- s.m.set(value, struct{}{}, true)
+ s.m = s.m.set(value, struct{}{}, true)
}
return s
}
@@ -146,24 +140,18 @@ func NewSortedSet[T comparable](comparer Comparer[T], values ...T) SortedSet[T]
//
// This function will return a new set even if the set already contains the value.
func (s SortedSet[T]) Set(values ...T) SortedSet[T] {
- n := SortedSet[T]{
- m: s.m.clone(),
- }
for _, value := range values {
- n.m.set(value, struct{}{}, true)
+ s.m = s.m.Set(value, struct{}{})
}
- return n
+ return s
}
// Delete returns a set with the given key removed.
func (s SortedSet[T]) Delete(values ...T) SortedSet[T] {
- n := SortedSet[T]{
- m: s.m.clone(),
- }
for _, value := range values {
- n.m.delete(value, true)
+ s.m = s.m.Delete(value)
}
- return n
+ return s
}
// Has returns true when the set contains the given value