package moreatomic import ( "sync" "github.com/diamondburned/arikawa/v2/discord" ) type SnowflakeSet struct { set map[discord.Snowflake]struct{} mut sync.Mutex } // NewSnowflakeSet creates a new SnowflakeSet. func NewSnowflakeSet() *SnowflakeSet { return &SnowflakeSet{ set: make(map[discord.Snowflake]struct{}), } } // Add adds the passed discord.Snowflake to the set. func (s *SnowflakeSet) Add(flake discord.Snowflake) { s.mut.Lock() s.set[flake] = struct{}{} s.mut.Unlock() } // Contains checks whether the passed discord.Snowflake is present in the set. func (s *SnowflakeSet) Contains(flake discord.Snowflake) (ok bool) { s.mut.Lock() defer s.mut.Unlock() _, ok = s.set[flake] return } // Delete deletes the passed discord.Snowflake from the set and returns true if // the element is present. If not, Delete is a no-op and returns false. func (s *SnowflakeSet) Delete(flake discord.Snowflake) bool { s.mut.Lock() defer s.mut.Unlock() if _, ok := s.set[flake]; ok { delete(s.set, flake) return true } return false }