Go module
This commit is contained in:
parent
8d70ff29e6
commit
88da2e9115
|
@ -0,0 +1,63 @@
|
|||
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
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
package cdatatypes
|
||||
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
type CSlice struct {
|
||||
sync.RWMutex
|
||||
items []interface{}
|
||||
}
|
||||
|
||||
func NewCSlice() *CSlice {
|
||||
return &CSlice{sync.RWMutex{}, []interface{}{}}
|
||||
}
|
||||
|
||||
func (s *CSlice) Append(value interface{}) {
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
|
||||
s.items = append(s.items, value)
|
||||
}
|
||||
|
||||
func (s *CSlice) Clear() {
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
|
||||
s.items = []interface{}{}
|
||||
}
|
||||
|
||||
func (s *CSlice) Pop() (ret interface{}, ok bool) {
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
|
||||
switch len(s.items) {
|
||||
case 0:
|
||||
ret = nil
|
||||
ok = false
|
||||
break
|
||||
case 1:
|
||||
ret = s.items[0]
|
||||
ok = true
|
||||
s.items = []interface{}{}
|
||||
break
|
||||
default:
|
||||
ret = s.items[0]
|
||||
ok = true
|
||||
s.items = s.items[1:]
|
||||
break
|
||||
}
|
||||
|
||||
return ret, ok
|
||||
}
|
||||
|
||||
func (s *CSlice) Len() (ret int) {
|
||||
s.RLock()
|
||||
defer s.RUnlock()
|
||||
|
||||
ret = len(s.items)
|
||||
return ret
|
||||
}
|
||||
|
||||
func (s *CSlice) Items() []interface{} {
|
||||
s.RLock()
|
||||
defer s.RUnlock()
|
||||
|
||||
ret := []interface{}{}
|
||||
for _, v := range s.items {
|
||||
ret = append(ret, v)
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
Loading…
Reference in New Issue