summaryrefslogtreecommitdiff
path: root/src/gobang.go
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2025-02-21 09:48:06 -0300
committerEuAndreh <eu@euandre.org>2025-02-23 07:28:42 -0300
commit909ca40a09662edfb8ca68d11dda52273141bf70 (patch)
treec7a017f68bb7cc720ebdd46a1d91a98715ebe245 /src/gobang.go
parentsrc/gobang.go: Add simplistic PairT type (diff)
downloadgobang-909ca40a09662edfb8ca68d11dda52273141bf70.tar.gz
gobang-909ca40a09662edfb8ca68d11dda52273141bf70.tar.xz
src/gobang.go: Add SetT type alongside SetOf() and Contains() functions
Diffstat (limited to 'src/gobang.go')
-rw-r--r--src/gobang.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/gobang.go b/src/gobang.go
index 38ae50a..a75688d 100644
--- a/src/gobang.go
+++ b/src/gobang.go
@@ -32,6 +32,10 @@ const (
)
+type SetT[T comparable] struct{
+ data map[T]struct{}
+}
+
type PairT[A any, B any] struct{
L A
R B
@@ -54,6 +58,7 @@ const (
SQLiteNow = "strftime('%Y-%m-%dT%H:%M:%f000000Z', 'now')"
)
+
var (
level LogLevel = LevelInfo
emitMetric = true
@@ -70,6 +75,24 @@ var (
+func SetOf[T comparable](values ...T) SetT[T] {
+ s := SetT[T]{
+ data: map[T]struct{}{
+ },
+ }
+
+ for _, value := range values {
+ s.data[value] = struct{}{}
+ }
+
+ return s
+}
+
+func Contains[T comparable](set SetT[T], value T) bool {
+ _, ok := set.data[value]
+ return ok
+}
+
func MapIndexed[A any, B any](fn func(A, int) B, coll []A) []B {
out := make([]B, len(coll))
for i, x := range coll {