| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 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)
- }
- }
|