Go module

This commit is contained in:
Matthias Fulz 2020-08-26 16:25:05 +02:00
parent 8d70ff29e6
commit 88da2e9115
3 changed files with 138 additions and 0 deletions

63
cmap.go Normal file
View File

@ -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
}

72
cslice.go Normal file
View File

@ -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
}

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module gitea.olznet.de/OlzNet/cdatatypes
go 1.15