package graphview

import (
	"sort"

	"k8s.io/apimachinery/pkg/util/sets"
)

type IntSet map[int]sets.Empty

// NewIntSet creates a IntSet from a list of values.
func NewIntSet(items ...int) IntSet {
	ss := IntSet{}
	ss.Insert(items...)
	return ss
}

// Insert adds items to the set.
func (s IntSet) Insert(items ...int) {
	for _, item := range items {
		s[item] = sets.Empty{}
	}
}

// Delete removes all items from the set.
func (s IntSet) Delete(items ...int) {
	for _, item := range items {
		delete(s, item)
	}
}

// Has returns true iff item is contained in the set.
func (s IntSet) Has(item int) bool {
	_, contained := s[item]
	return contained
}

// List returns the contents as a sorted string slice.
func (s IntSet) List() []int {
	res := make([]int, 0, len(s))
	for key := range s {
		res = append(res, key)
	}
	sort.IntSlice(res).Sort()
	return res
}
