2022-11-13 09:35:47 +01:00

70 lines
1.2 KiB
Go

package settingsdocument
import "sync"
type settingsQueue struct {
sync.Mutex
queued map[string]struct{}
deleted map[string]struct{}
}
func newSettingsQueue() *settingsQueue {
return &settingsQueue{
Mutex: sync.Mutex{},
queued: map[string]struct{}{},
deleted: map[string]struct{}{},
}
}
func (q *settingsQueue) add(ids []string) {
q.Lock()
defer q.Unlock()
for _, id := range ids {
if _, exists := q.deleted[id]; exists {
continue
}
if _, exists := q.queued[id]; exists {
continue
}
q.queued[id] = struct{}{}
}
}
func (q *settingsQueue) getQueued() (ids []string) {
q.Lock()
defer q.Unlock()
ids = make([]string, 0, len(q.queued))
for id := range q.queued {
ids = append(ids, id)
}
return
}
func (q *settingsQueue) delete(id string) {
q.Lock()
defer q.Unlock()
delete(q.queued, id)
q.deleted[id] = struct{}{}
}
func (q *settingsQueue) queueIfDeleted(id string) {
q.Lock()
defer q.Unlock()
if _, exists := q.deleted[id]; exists {
delete(q.deleted, id)
q.queued[id] = struct{}{}
}
}
func (q *settingsQueue) exists(id string) bool {
q.Lock()
defer q.Unlock()
if _, exists := q.deleted[id]; exists {
return true
}
if _, exists := q.queued[id]; exists {
return true
}
return false
}