github.com/devops-filetransfer/sshego@v7.0.4+incompatible/amap.go (about) 1 package sshego 2 3 import ( 4 "fmt" 5 "sync" 6 ) 7 8 // atomic map from string to *User 9 10 //go:generate greenpack 11 12 type AtomicUserMap struct { 13 U map[string]*User 14 tex sync.RWMutex 15 } 16 17 func NewAtomicUserMap() *AtomicUserMap { 18 return &AtomicUserMap{ 19 U: make(map[string]*User), 20 } 21 } 22 23 func (m *AtomicUserMap) Get(key string) *User { 24 m.tex.RLock() 25 defer m.tex.RUnlock() 26 return m.U[key] 27 } 28 29 func (m *AtomicUserMap) Get2(key string) (*User, bool) { 30 m.tex.RLock() 31 defer m.tex.RUnlock() 32 v, ok := m.U[key] 33 return v, ok 34 } 35 36 func (m *AtomicUserMap) Set(key string, val *User) { 37 m.tex.Lock() 38 defer m.tex.Unlock() 39 m.U[key] = val 40 } 41 42 func (m *AtomicUserMap) Del(key string) { 43 m.tex.Lock() 44 defer m.tex.Unlock() 45 delete(m.U, key) 46 } 47 48 func (m *AtomicUserMap) String() string { 49 m.tex.Lock() 50 defer m.tex.Unlock() 51 s := "{" 52 for k, v := range m.U { 53 s += fmt.Sprintf(`"%s":%s,\n`, k, v) 54 } 55 s += "}" 56 return s 57 }