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  }