cdatatypes/cmap.go

64 lines
935 B
Go

package cdatatypes
import (
"sync"
)
type CMap struct {
sync.RWMutex
items map[interface{}]interface{}
}
func NewCMap() *CMap {
return &CMap{sync.RWMutex{}, make(map[interface{}]interface{})}
}
func (m *CMap) Set(key interface{}, value interface{}) {
m.Lock()
defer m.Unlock()
m.items[key] = value
}
func (m *CMap) Get(key interface{}) (value interface{}, ok bool) {
m.RLock()
defer m.RUnlock()
value, ok = m.items[key]
return value, ok
}
func (m *CMap) Delete(key interface{}) {
m.Lock()
defer m.Unlock()
delete(m.items, key)
}
func (m *CMap) Clear() {
m.Lock()
defer m.Unlock()
m.items = make(map[interface{}]interface{})
}
func (m *CMap) Len() int {
m.RLock()
defer m.RUnlock()
ret := len(m.items)
return ret
}
func (m *CMap) Items() map[interface{}]interface{} {
m.RLock()
defer m.RUnlock()
ret := make(map[interface{}]interface{})
for k, v := range m.items {
ret[k] = v
}
return ret
}