2020-06-06 20:47:15 +00:00
|
|
|
package moreatomic
|
|
|
|
|
|
|
|
import (
|
|
|
|
"sync"
|
|
|
|
|
2020-10-28 22:39:59 +00:00
|
|
|
"github.com/diamondburned/arikawa/v2/discord"
|
2020-06-06 20:47:15 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|