mirror of
https://github.com/ollama/ollama.git
synced 2025-11-11 20:27:38 +01:00
39 lines
648 B
Go
39 lines
648 B
Go
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)
|
|
}
|