geekai/types/types.go

50 lines
747 B
Go

package types
import (
"sync"
)
type LockedMap struct {
lock sync.RWMutex
data map[string]interface{}
}
func NewLockedMap() *LockedMap {
return &LockedMap{
lock: sync.RWMutex{},
data: make(map[string]interface{}),
}
}
func (m *LockedMap) Put(key string, value interface{}) {
m.lock.Lock()
defer m.lock.Unlock()
m.data[key] = value
}
func (m *LockedMap) Get(key string) interface{} {
m.lock.RLock()
defer m.lock.RUnlock()
return m.data[key]
}
func (m *LockedMap) Delete(key string) {
m.lock.Lock()
defer m.lock.Unlock()
delete(m.data, key)
}
func (m *LockedMap) ToList() []interface{} {
m.lock.Lock()
defer m.lock.Unlock()
var s = make([]interface{}, 0)
for _, v := range m.data {
s = append(s, v)
}
return s
}