From a470aa89cbdabba813636b8a29be8ae3836c03a0 Mon Sep 17 00:00:00 2001 From: Marc Pervaz Boocha Date: Fri, 21 Feb 2025 18:24:35 +0530 Subject: Added LTR Eviction --- internal/pausedtimer/timer.go | 54 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 internal/pausedtimer/timer.go (limited to 'internal/pausedtimer/timer.go') diff --git a/internal/pausedtimer/timer.go b/internal/pausedtimer/timer.go new file mode 100644 index 0000000..691c257 --- /dev/null +++ b/internal/pausedtimer/timer.go @@ -0,0 +1,54 @@ +package pausedtimer + +import ( + "math" + "time" +) + +// PauseTimer is a struct that wraps a time.Ticker and provides additional functionality +// to pause and resume the ticker. +// If the duration is 0, the timer is created in a stopped state. +type PauseTimer struct { + *time.Ticker + duration time.Duration +} + +// New creates a new pauseTimer with the specified duration. +func New(d time.Duration) *PauseTimer { + ret := &PauseTimer{duration: d} + if d != 0 { + ret.Ticker = time.NewTicker(d) + } else { + ret.Ticker = time.NewTicker(math.MaxInt64) + ret.Reset(0) + } + return ret +} + +// NewStopped creates a new pauseTimer with the specified duration and stops it immediately. +func NewStopped(d time.Duration) *PauseTimer { + ret := New(d) + ret.Stop() + return ret +} + +// Reset sets the timer to the specified duration and starts it. +// If the duration is 0, the timer is stopped. +func (t *PauseTimer) Reset(d time.Duration) { + t.duration = d + if t.duration == 0 { + t.Stop() + } else { + t.Ticker.Reset(d) + } +} + +// Resume resumes the timer with its last set duration. +func (t *PauseTimer) Resume() { + t.Reset(t.GetDuration()) +} + +// GetDuration returns the current duration of the timer. +func (t *PauseTimer) GetDuration() time.Duration { + return t.duration +} -- cgit v1.2.3-70-g09d2