package data

import (
	"sync"
)

var (
	// Cache
	CacheMapString *MapString
)

// lock
type MapString struct {
	sync.RWMutex
	Data map[string]string
}

func NewMapString() *MapString {
	return &MapString{
		Data: make(map[string]string),
	}
}

func (c *MapString) Get(key string) string {
	c.RLock()
	defer c.RUnlock()

	vals, ok := c.Data[key]
	if !ok {
		return ""
	}

	return vals
}

func (c *MapString) Set(key, val string) {
	c.Lock()
	defer c.Unlock()
	c.Data[key] = val
}

func (c *MapString) Keys() (keys []string) {
	c.RLock()
	defer c.RUnlock()

	for k, _ := range c.Data {
		keys = append(keys, k)
	}

	return
}