blob: 6ff212c7a344728ad1459569e027c76e88399990 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
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
}
|