// Copyright (C) 2022 Luke Shumaker // // SPDX-License-Identifier: GPL-2.0-or-later package slices import ( "sort" "golang.org/x/exp/constraints" ) func Contains[T comparable](needle T, haystack []T) bool { for _, straw := range haystack { if needle == straw { return true } } return false } func RemoveAll[T comparable](haystack []T, needle T) []T { for i, straw := range haystack { if needle == straw { return append( haystack[:i], RemoveAll(haystack[i+1:], needle)...) } } return haystack } func RemoveAllFunc[T any](haystack []T, f func(T) bool) []T { for i, straw := range haystack { if f(straw) { return append( haystack[:i], RemoveAllFunc(haystack[i+1:], f)...) } } return haystack } func Reverse[T any](slice []T) { for i := 0; i < len(slice)/2; i++ { j := (len(slice) - 1) - i slice[i], slice[j] = slice[j], slice[i] } } func Max[T constraints.Ordered](a T, rest ...T) T { ret := a for _, b := range rest { if b > a { ret = b } } return ret } func Min[T constraints.Ordered](a T, rest ...T) T { ret := a for _, b := range rest { if b < a { ret = b } } return ret } func Sort[T constraints.Ordered](slice []T) { sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] }) }