package util import ( "golang.org/x/exp/constraints" ) func InSlice[T comparable](needle T, haystack []T) bool { for _, straw := range haystack { if needle == straw { return true } } return false } func RemoveAllFromSlice[T comparable](haystack []T, needle T) []T { for i, straw := range haystack { if needle == straw { return append( haystack[:i], RemoveAllFromSlice(haystack[i+1:], needle)...) } } return haystack } func RemoveAllFromSliceFunc[T any](haystack []T, f func(T) bool) []T { for i, straw := range haystack { if f(straw) { return append( haystack[:i], RemoveAllFromSliceFunc(haystack[i+1:], f)...) } } return haystack } func Max[T constraints.Ordered](a, b T) T { if a > b { return a } return b } func Min[T constraints.Ordered](a, b T) T { if a < b { return a } return b }