From 909ca40a09662edfb8ca68d11dda52273141bf70 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 21 Feb 2025 09:48:06 -0300 Subject: src/gobang.go: Add SetT type alongside SetOf() and Contains() functions --- src/gobang.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/gobang.go') 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 { -- cgit v1.2.3