/
loopState.go
47 lines (36 loc) · 1.04 KB
/
loopState.go
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
package pipes
import "sync/atomic"
// PartLoopStateType represents the state of a part (parent, child) loop
type PartLoopStateType = uint32
const (
// PartLoopInit signals that loop hasn't been started yet
PartLoopInit PartLoopStateType = iota
// PartLoopRunning signals that a loop is running
PartLoopRunning
// PartLoopStopped signals that a loop is stopped
PartLoopStopped
)
type partLoopState struct {
value PartLoopStateType
}
func (state *partLoopState) setRunning() {
state.set(PartLoopRunning)
}
func (state *partLoopState) setStopped() {
state.set(PartLoopStopped)
}
func (state *partLoopState) isInit() bool {
return state.is(PartLoopInit)
}
func (state *partLoopState) isRunning() bool {
return state.is(PartLoopRunning)
}
func (state *partLoopState) isStopped() bool {
return state.is(PartLoopStopped)
}
func (state *partLoopState) set(value PartLoopStateType) {
atomic.StoreUint32(&state.value, value)
}
func (state *partLoopState) is(value PartLoopStateType) bool {
return atomic.CompareAndSwapUint32(&state.value, value, value)
}