31 lines
490 B
Go
31 lines
490 B
Go
package core
|
|
|
|
// Links store
|
|
|
|
type LinkStore[K comparable, V any] struct {
|
|
entries map[K]*V
|
|
arena Arena[V]
|
|
}
|
|
|
|
func (s *LinkStore[K, V]) Get(key K) *V {
|
|
value := s.entries[key]
|
|
if value != nil {
|
|
return value
|
|
}
|
|
if s.entries == nil {
|
|
s.entries = make(map[K]*V)
|
|
}
|
|
value = s.arena.New()
|
|
s.entries[key] = value
|
|
return value
|
|
}
|
|
|
|
func (s *LinkStore[K, V]) Has(key K) bool {
|
|
_, ok := s.entries[key]
|
|
return ok
|
|
}
|
|
|
|
func (s *LinkStore[K, V]) TryGet(key K) *V {
|
|
return s.entries[key]
|
|
}
|