life_time.go 894 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. // package life_time -- глобальный счётчик древности записи в паамяти
  2. package life_time
  3. import (
  4. "math"
  5. "sync"
  6. "git.p78su.freemyip.com/svi/gostore/pkg/types"
  7. )
  8. // LifeTime -- глобальный счётчик древности записи в паамяти
  9. type LifeTime struct {
  10. timeLife int // Глобальный счётчик
  11. block sync.Mutex
  12. }
  13. // NewLifeTime -- возвращает новый глобальный счётчик
  14. func NewLifeTime() types.ILifeTime {
  15. sf := &LifeTime{
  16. timeLife: math.MaxInt,
  17. }
  18. return sf
  19. }
  20. // Next -- возвращает следующую метку времени и признак перебора
  21. func (sf *LifeTime) Next() int {
  22. sf.block.Lock()
  23. defer sf.block.Unlock()
  24. sf.timeLife--
  25. defer func() {
  26. if sf.timeLife <= 0 {
  27. sf.timeLife = math.MaxInt
  28. }
  29. }()
  30. return sf.timeLife
  31. }