diff options
author | Marc Pervaz Boocha <marcpervaz@qburst.com> | 2025-02-21 18:24:35 +0530 |
---|---|---|
committer | Marc Pervaz Boocha <marcpervaz@qburst.com> | 2025-02-21 18:24:35 +0530 |
commit | a470aa89cbdabba813636b8a29be8ae3836c03a0 (patch) | |
tree | 2551bebaff980cc93bf8fcf60dd8ff50bd7efc48 /internal/pausedtimer | |
parent | Add Tests and benchmarks (diff) | |
download | cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.tar cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.tar.gz cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.tar.bz2 cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.tar.lz cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.tar.xz cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.tar.zst cache-a470aa89cbdabba813636b8a29be8ae3836c03a0.zip |
Added LTR Eviction
Diffstat (limited to '')
-rw-r--r-- | internal/pausedtimer/timer.go | 54 | ||||
-rw-r--r-- | internal/pausedtimer/timer_test.go (renamed from utils_test.go) | 12 |
2 files changed, 60 insertions, 6 deletions
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 +} diff --git a/utils_test.go b/internal/pausedtimer/timer_test.go index 329b166..6e15001 100644 --- a/utils_test.go +++ b/internal/pausedtimer/timer_test.go @@ -1,4 +1,4 @@ -package cache +package pausedtimer import ( "testing" @@ -7,16 +7,16 @@ import ( "github.com/stretchr/testify/assert" ) -func TestNewPauseTimer(t *testing.T) { +func TestNew(t *testing.T) { d := 1 * time.Second - timer := newPauseTimer(d) + timer := New(d) assert.Equal(t, d, timer.duration) assert.NotNil(t, timer.Ticker) } func TestPauseTimerReset(t *testing.T) { d := 1 * time.Second - timer := newPauseTimer(d) + timer := New(d) newD := 2 * time.Second timer.Reset(newD) assert.Equal(t, newD, timer.duration) @@ -24,13 +24,13 @@ func TestPauseTimerReset(t *testing.T) { func TestPauseTimerResume(t *testing.T) { d := 1 * time.Second - timer := newPauseTimerStopped(d) + timer := NewStopped(d) timer.Resume() assert.Equal(t, d, timer.duration) } func TestPauseTimerGetDuration(t *testing.T) { d := 1 * time.Second - timer := newPauseTimer(d) + timer := New(d) assert.Equal(t, d, timer.GetDuration()) } |