notify_channel.go 702 字节
Newer Older
N
ning 已提交
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
package dispatch

// NotifyChannels channelKey -> bool
type NotifyChannels map[string]bool

func NewNotifyChannels(channels []string) NotifyChannels {
	nc := make(NotifyChannels)
	for _, ch := range channels {
		nc[ch] = true
	}
	return nc
}

func (nc NotifyChannels) OrMerge(other NotifyChannels) {
	nc.merge(other, func(a, b bool) bool { return a || b })
}

func (nc NotifyChannels) AndMerge(other NotifyChannels) {
	nc.merge(other, func(a, b bool) bool { return a && b })
}

func (nc NotifyChannels) merge(other NotifyChannels, f func(bool, bool) bool) {
	if other == nil {
		return
	}
	for k, v := range other {
		if curV, has := nc[k]; has {
			nc[k] = f(curV, v)
		} else {
			nc[k] = v
		}
	}
}