summaryrefslogtreecommitdiffstats
path: root/test/typeparam/issue48716.dir/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/typeparam/issue48716.dir/main.go')
-rw-r--r--test/typeparam/issue48716.dir/main.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/test/typeparam/issue48716.dir/main.go b/test/typeparam/issue48716.dir/main.go
new file mode 100644
index 0000000..13a126e
--- /dev/null
+++ b/test/typeparam/issue48716.dir/main.go
@@ -0,0 +1,58 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+ "./a"
+)
+
+// Creates copy of set
+func Copy[T comparable](src MapSet[T]) (dst MapSet[T]) {
+ dst = HashSet[T](src.Len())
+ Fill(src, dst)
+ return
+}
+
+// Fill src from dst
+func Fill[T any](src, dst MapSet[T]) {
+ src.Iterate(func(t T) bool {
+ dst.Add(t)
+ return true
+ })
+ return
+}
+
+type MapSet[T any] struct {
+ m a.Map[T, struct{}]
+}
+
+func HashSet[T comparable](capacity int) MapSet[T] {
+ return FromMap[T](a.NewHashMap[T, struct{}](capacity))
+}
+
+func FromMap[T any](m a.Map[T, struct{}]) MapSet[T] {
+ return MapSet[T]{
+ m: m,
+ }
+}
+
+func (s MapSet[T]) Add(t T) {
+ s.m.Put(t, struct{}{})
+}
+
+func (s MapSet[T]) Len() int {
+ return s.m.Len()
+}
+
+func (s MapSet[T]) Iterate(cb func(T) bool) {
+ s.m.Iterate(func(p a.Pair[T, struct{}]) bool {
+ return cb(p.L)
+ })
+}
+
+func main() {
+ x := FromMap[int](a.NewHashMap[int, struct{}](1))
+ Copy[int](x)
+}