mirror of https://gitee.com/namelin2022/ollama
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
648 B
39 lines
648 B
|
11 months ago
|
package syncmap
|
||
|
|
|
||
|
|
import (
|
||
|
|
"maps"
|
||
|
|
"sync"
|
||
|
|
)
|
||
|
|
|
||
|
|
// SyncMap is a simple, generic thread-safe map implementation.
|
||
|
|
type SyncMap[K comparable, V any] struct {
|
||
|
|
mu sync.RWMutex
|
||
|
|
m map[K]V
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewSyncMap[K comparable, V any]() *SyncMap[K, V] {
|
||
|
|
return &SyncMap[K, V]{
|
||
|
|
m: make(map[K]V),
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *SyncMap[K, V]) Load(key K) (V, bool) {
|
||
|
|
s.mu.RLock()
|
||
|
|
defer s.mu.RUnlock()
|
||
|
|
val, ok := s.m[key]
|
||
|
|
return val, ok
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *SyncMap[K, V]) Store(key K, value V) {
|
||
|
|
s.mu.Lock()
|
||
|
|
defer s.mu.Unlock()
|
||
|
|
s.m[key] = value
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *SyncMap[K, V]) Items() map[K]V {
|
||
|
|
s.mu.RLock()
|
||
|
|
defer s.mu.RUnlock()
|
||
|
|
// shallow copy map items
|
||
|
|
return maps.Clone(s.m)
|
||
|
|
}
|