Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package syncmap
- type SyncMap struct {
- ops chan func(map[string]interface{})
- m map[string]interface{}
- }
- func (sm *SyncMap) loop() chan func(map[string]interface{}) {
- ops := make(chan func(map[string]interface{}))
- if sm.m == nil {
- sm.m = make(map[string]interface{})
- }
- go func() {
- for op := range ops {
- op(sm.m)
- }
- }()
- return ops
- }
- func (sm *SyncMap) Do(op func(map[string]interface{})) {
- if sm.ops == nil {
- sm.ops = sm.loop()
- }
- sm.ops <- op
- }
- func New() *SyncMap {
- sm := new(SyncMap)
- sm.ops = sm.loop()
- sm.m = make(map[string]interface{})
- return sm
- }
- func (sm *SyncMap) Add(key string, value interface{}) {
- sm.Do(func(m map[string]interface{}) {
- m[key] = value
- })
- }
- func (sm *SyncMap) Del(key string) {
- sm.Do(func(m map[string]interface{}) {
- delete(m, key)
- })
- }
- func (sm *SyncMap) Get(key string) interface{} {
- result := make(chan interface{})
- sm.Do(func(m map[string]interface{}) {
- result <- m[key]
- })
- return <-result
- }
Add Comment
Please, Sign In to add comment