package playback import "sync" type StatusStore struct { mu sync.RWMutex generation uint64 statuses map[Unit]Status } func NewStatusStore() *StatusStore { return &StatusStore{ statuses: make(map[Unit]Status), } } func (s *StatusStore) Observe(status Status) { s.mu.Lock() defer s.mu.Unlock() if status.Generation < s.generation { return } if status.Generation > s.generation { clear(s.statuses) s.generation = status.Generation } s.statuses[status.Unit] = status } func (s *StatusStore) Snapshot(unit Unit) (Status, bool) { s.mu.RLock() status, ok := s.statuses[unit] s.mu.RUnlock() return status, ok } func (s *StatusStore) Clear(unit Unit) { s.mu.Lock() delete(s.statuses, unit) s.mu.Unlock() }