1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2024-12-15 17:51:20 +00:00
kyverno/pkg/globalcontext/store/store.go
Charles-Edouard Brétéché b59353c657
chore: move global context package out of engine (#9618)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-02-02 14:35:24 +00:00

50 lines
759 B
Go

package store
import (
"sync"
)
type Store interface {
Set(key string, val Entry)
Get(key string) (Entry, bool)
Delete(key string)
}
type store struct {
sync.RWMutex
store map[string]Entry
}
func New() Store {
return &store{
store: make(map[string]Entry),
}
}
func (l *store) Set(key string, val Entry) {
l.Lock()
defer l.Unlock()
old := l.store[key]
// If the key already exists, skip it before replacing it
if old != nil {
val.Stop()
}
l.store[key] = val
}
func (l *store) Get(key string) (Entry, bool) {
l.RLock()
defer l.RUnlock()
entry, ok := l.store[key]
return entry, ok
}
func (l *store) Delete(key string) {
l.Lock()
defer l.Unlock()
entry := l.store[key]
if entry != nil {
entry.Stop()
}
delete(l.store, key)
}