diff --git a/unique_array.go b/unique_array.go index d9492d0..e03621a 100644 --- a/unique_array.go +++ b/unique_array.go @@ -3,26 +3,37 @@ package main // Unique array data structure type uniq_arr[T comparable] struct { backingMap map[T]struct{} // Map is used to check if element exists - Empty structs occupy zero memory - vals []T } func new_uniq_arr[T comparable]() uniq_arr[T] { return uniq_arr[T]{ make(map[T]struct{}), - make([]T, 0), } } func (s *uniq_arr[T]) add(vals ...T) { for _, item := range vals { if !s.contains(item) { s.backingMap[item] = struct{}{} - s.vals = append(s.vals, item) } } return } -func (s *uniq_arr[T]) contains(val T) bool { +func (s uniq_arr[T]) contains(val T) bool { _, ok := s.backingMap[val] return ok } + +func (s *uniq_arr[T]) delete(val T) { + delete(s.backingMap, val) +} + +func (s uniq_arr[T]) values() []T { + toRet := make([]T, len(s.backingMap)) + i := 0 + for k := range s.backingMap { + toRet[i] = k + i++ + } + return toRet +}