diff options
author | Oskar Haarklou Veileborg <ohv1020@hotmail.com> | 2023-01-09 20:28:08 +0100 |
---|---|---|
committer | Oskar Haarklou Veileborg <ohv1020@hotmail.com> | 2023-01-09 20:28:08 +0100 |
commit | 8e1383ea6a9561610e00b8c7f401bca1257f9001 (patch) | |
tree | 3ce620c77162717648feb4ae411b6a63acb0f2e3 /sets.go | |
parent | Merge pull request #35 from laher/sets-maps-append-multi (diff) | |
download | pds-8e1383ea6a9561610e00b8c7f401bca1257f9001.tar.gz pds-8e1383ea6a9561610e00b8c7f401bca1257f9001.tar.xz |
Ensure immutability of sets (and maps with SetMany)
Diffstat (limited to 'sets.go')
-rw-r--r-- | sets.go | 32 |
1 files changed, 10 insertions, 22 deletions
@@ -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 |