mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 07:40:56 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
 | 
						|
 | 
						|
package expires
 | 
						|
 | 
						|
import "sync"
 | 
						|
 | 
						|
type IdKeyMap struct {
 | 
						|
	idKeys map[int64]string // id => key
 | 
						|
	keyIds map[string]int64 // key => id
 | 
						|
 | 
						|
	locker sync.Mutex
 | 
						|
}
 | 
						|
 | 
						|
func NewIdKeyMap() *IdKeyMap {
 | 
						|
	return &IdKeyMap{
 | 
						|
		idKeys: map[int64]string{},
 | 
						|
		keyIds: map[string]int64{},
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (this *IdKeyMap) Add(id int64, key string) {
 | 
						|
	oldKey, ok := this.idKeys[id]
 | 
						|
	if ok {
 | 
						|
		delete(this.keyIds, oldKey)
 | 
						|
	}
 | 
						|
 | 
						|
	oldId, ok := this.keyIds[key]
 | 
						|
	if ok {
 | 
						|
		delete(this.idKeys, oldId)
 | 
						|
	}
 | 
						|
 | 
						|
	this.idKeys[id] = key
 | 
						|
	this.keyIds[key] = id
 | 
						|
}
 | 
						|
 | 
						|
func (this *IdKeyMap) Key(id int64) (key string, ok bool) {
 | 
						|
	key, ok = this.idKeys[id]
 | 
						|
	return
 | 
						|
}
 | 
						|
 | 
						|
func (this *IdKeyMap) Id(key string) (id int64, ok bool) {
 | 
						|
	id, ok = this.keyIds[key]
 | 
						|
	return
 | 
						|
}
 | 
						|
 | 
						|
func (this *IdKeyMap) DeleteId(id int64) {
 | 
						|
	key, ok := this.idKeys[id]
 | 
						|
	if ok {
 | 
						|
		delete(this.keyIds, key)
 | 
						|
	}
 | 
						|
	delete(this.idKeys, id)
 | 
						|
}
 | 
						|
 | 
						|
func (this *IdKeyMap) DeleteKey(key string) {
 | 
						|
	id, ok := this.keyIds[key]
 | 
						|
	if ok {
 | 
						|
		delete(this.idKeys, id)
 | 
						|
	}
 | 
						|
	delete(this.keyIds, key)
 | 
						|
}
 | 
						|
 | 
						|
func (this *IdKeyMap) Len() int {
 | 
						|
	return len(this.idKeys)
 | 
						|
}
 |