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() defer kvmu.RUnlock() data, ok := kvMap[key] if !ok { err = errors.New("key not exists") } 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() 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 }