Something went wrong. Try again.
🌱 A minimal programming language and compiler. git.urbach.dev/cli/q
high-performance programming-language compiler
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243package set
import ( "iter" "slices")
// Ordered is an ordered set.type Ordered[T comparable] struct { values []T}
// Add adds a value to the set if it doesn't exist yet.// It returns `false` if it already exists, `true` if it was added.func (set *Ordered[T]) Add(value T) bool { if slices.Contains(set.values, value) { return false }
set.values = append(set.values, value) return true}
// All returns an iterator over all the values in the set.func (set *Ordered[T]) All() iter.Seq[T] { return func(yield func(T) bool) { for _, value := range set.values { if !yield(value) { return } } }}
// Count returns the number of elements in the set.func (set *Ordered[T]) Count() int { return len(set.values)}
// Slice returns the set of elements as a slice.func (set *Ordered[T]) Slice() []T { return set.values}