41
vendor/github.com/anacrolix/missinggo/flag.go
generated
vendored
Normal file
41
vendor/github.com/anacrolix/missinggo/flag.go
generated
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
package missinggo
|
||||
|
||||
import "sync"
|
||||
|
||||
// Flag represents a boolean value, that signals sync.Cond's when it changes.
|
||||
// It's not concurrent safe by intention.
|
||||
type Flag struct {
|
||||
Conds map[*sync.Cond]struct{}
|
||||
value bool
|
||||
}
|
||||
|
||||
func (me *Flag) Set(value bool) {
|
||||
if value != me.value {
|
||||
me.broadcastChange()
|
||||
}
|
||||
me.value = value
|
||||
}
|
||||
|
||||
func (me *Flag) Get() bool {
|
||||
return me.value
|
||||
}
|
||||
|
||||
func (me *Flag) broadcastChange() {
|
||||
for cond := range me.Conds {
|
||||
cond.Broadcast()
|
||||
}
|
||||
}
|
||||
|
||||
func (me *Flag) addCond(c *sync.Cond) {
|
||||
if me.Conds == nil {
|
||||
me.Conds = make(map[*sync.Cond]struct{})
|
||||
}
|
||||
me.Conds[c] = struct{}{}
|
||||
}
|
||||
|
||||
// Adds the sync.Cond to all the given Flag's.
|
||||
func AddCondToFlags(cond *sync.Cond, flags ...*Flag) {
|
||||
for _, f := range flags {
|
||||
f.addCond(cond)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user