39 lines
692 B
Go
39 lines
692 B
Go
|
package cache
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
type UserGroupMemberMap struct {
|
||
|
sync.RWMutex
|
||
|
Data map[int64]map[int64]struct{}
|
||
|
}
|
||
|
|
||
|
// groupid -> userid
|
||
|
var UserGroupMember = &UserGroupMemberMap{Data: make(map[int64]map[int64]struct{})}
|
||
|
|
||
|
func (m *UserGroupMemberMap) Get(id int64) (map[int64]struct{}, bool) {
|
||
|
m.RLock()
|
||
|
defer m.RUnlock()
|
||
|
ids, exists := m.Data[id]
|
||
|
return ids, exists
|
||
|
}
|
||
|
|
||
|
func (m *UserGroupMemberMap) Exists(gid, uid int64) bool {
|
||
|
m.RLock()
|
||
|
defer m.RUnlock()
|
||
|
uidMap, exists := m.Data[gid]
|
||
|
if !exists {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
_, exists = uidMap[uid]
|
||
|
return exists
|
||
|
}
|
||
|
|
||
|
func (m *UserGroupMemberMap) SetAll(data map[int64]map[int64]struct{}) {
|
||
|
m.Lock()
|
||
|
defer m.Unlock()
|
||
|
m.Data = data
|
||
|
}
|