state.go 498 B

123456789101112131415161718192021222324252627282930313233343536
  1. package neighbors
  2. type (
  3. State interface {
  4. Present() bool
  5. Changed() bool
  6. Set(present bool)
  7. }
  8. state struct {
  9. present, was, initial bool
  10. }
  11. )
  12. func NewState() State {
  13. return &state{initial: true}
  14. }
  15. func (s *state) Present() bool {
  16. return s.present
  17. }
  18. func (s *state) Changed() bool {
  19. return s.present != s.was
  20. }
  21. func (s *state) Set(present bool) {
  22. if s.initial {
  23. s.was = !present
  24. s.present = present
  25. s.initial = false
  26. } else {
  27. s.was = s.present
  28. s.present = present
  29. }
  30. }