diff --git a/basicrw.go b/basicrw.go index 84cd449..a2b951a 100644 --- a/basicrw.go +++ b/basicrw.go @@ -2,6 +2,35 @@ package starmap import "errors" +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 +} + func Get(key string) (interface{}, error) { var err error kvmu.RLock() @@ -13,6 +42,11 @@ func Get(key string) (interface{}, error) { return data, err } +func MustGet(key string) interface{} { + result, _ := Get(key) + return result +} + func Store(key string, value interface{}) error { kvmu.Lock() defer kvmu.Unlock() diff --git a/client_basicrw.go b/client_basicrw.go index 28ac15f..b304309 100644 --- a/client_basicrw.go +++ b/client_basicrw.go @@ -15,6 +15,12 @@ func (kv *RemoteKv) clientOnline() error { } return nil } + +func (kv *RemoteKv) MustGet(key string) interface{} { + result, _ := kv.Get(key) + return result +} + func (kv *RemoteKv) Get(key string) (interface{}, error) { kv.kvmu.Lock() defer kv.kvmu.Unlock() diff --git a/starmap.go b/starmap.go index 9cd711b..69ec2d9 100644 --- a/starmap.go +++ b/starmap.go @@ -7,6 +7,11 @@ var kvmu sync.RWMutex var kvMapPro map[string]StarMap var kvmuPro sync.RWMutex +type StarStack struct { + kvPushmu sync.RWMutex + kvStack []interface{} +} + func init() { kvMap = make(map[string]interface{}) kvMapPro = make(map[string]StarMap)