64 lines
935 B
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
|
|
}
|