You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
starmap/basicrw.go

72 lines
1.3 KiB
Go

4 years ago
package starmap
import "errors"
4 years ago
func (stack *StarStack) Count() int {
stack.kvPushmu.Lock()
defer stack.kvPushmu.Unlock()
return len(stack.kvStack)
}
func (stack *StarStack) Push(val interface{}) error {
stack.kvPushmu.Lock()
defer stack.kvPushmu.Unlock()
stack.kvStack = append(stack.kvStack, val)
return nil
}
func (stack *StarStack) Pop() (interface{}, error) {
stack.kvPushmu.Lock()
defer stack.kvPushmu.Unlock()
if len(stack.kvStack) == 0 {
return nil, errors.New("Empty Stacks")
}
val := stack.kvStack[0]
stack.kvStack = stack.kvStack[1:]
return val, nil
}
func (stack *StarStack) MustPop() interface{} {
val, _ := stack.Pop()
return val
}
4 years ago
func Get(key string) (interface{}, error) {
var err error
kvmu.RLock()
defer kvmu.RUnlock()
data, ok := kvMap[key]
if !ok {
err = errors.New("key not exists")
}
return data, err
}
4 years ago
func MustGet(key string) interface{} {
result, _ := Get(key)
return result
}
4 years ago
func Store(key string, value interface{}) error {
kvmu.Lock()
defer kvmu.Unlock()
kvMap[key] = value
return nil
}
func Delete(key string) error {
kvmu.Lock()
defer kvmu.Unlock()
delete(kvMap, key)
return nil
}
func Range(run func(k string, v interface{}) bool) error {
for k, v := range kvMap {
if !run(k, v) {
break
}
}
return nil
}