vojo/apps/ai-bot/util.go

33 lines
790 B
Go

package main
// lruSet is a bounded insertion-ordered string set used for event-id dedup and
// tracking our own sent event ids. Oldest entries evict once cap is reached.
type lruSet struct {
cap int
set map[string]struct{}
order []string
}
func newLRUSet(cap int) *lruSet {
return &lruSet{cap: cap, set: make(map[string]struct{}, cap), order: make([]string, 0, cap)}
}
func (l *lruSet) Has(k string) bool {
_, ok := l.set[k]
return ok
}
// Add inserts k and returns true if it was newly added (false if already present).
func (l *lruSet) Add(k string) bool {
if _, ok := l.set[k]; ok {
return false
}
if len(l.order) >= l.cap {
oldest := l.order[0]
l.order = l.order[1:]
delete(l.set, oldest)
}
l.set[k] = struct{}{}
l.order = append(l.order, k)
return true
}