func (wg *watcherGroup) watcherSetByKey(key string) watcherSet {
	wkeys := wg.keyWatchers[key]
	wranges := wg.ranges.Stab(adt.NewStringAffinePoint(key))

	// zero-copy cases
	switch {
	case len(wranges) == 0:
		// no need to merge ranges or copy; reuse single-key set
		return wkeys
	case len(wranges) == 0 && len(wkeys) == 0:
		return nil
	case len(wranges) == 1 && len(wkeys) == 0:
		return wranges[0].Val.(watcherSet)
	}

	// copy case
	ret := make(watcherSet)
	ret.union(wg.keyWatchers[key])
	for _, item := range wranges {
		ret.union(item.Val.(watcherSet))
	}
	return ret
}
func (wg *watcherGroup) watcherSetByKey(key string) watcherSet {
	wkeys := wg.keyWatchers[key]
	wranges := wg.ranges.Stab(adt.NewStringAffinePoint(key))

	
	switch {
	case len(wranges) == 0:
		
		return wkeys
	case len(wranges) == 0 && len(wkeys) == 0:
		return nil
	case len(wranges) == 1 && len(wkeys) == 0:
		return wranges[0].Val.(watcherSet)
	}

	
	ret := make(watcherSet)
	ret.union(wg.keyWatchers[key])
	for _, item := range wranges {
		ret.union(item.Val.(watcherSet))
	}
	return ret
}
func ( wg * watcherGroup ) watcherSetByKey ( key string ) watcherSet { wkeys := wg . keyWatchers [ key ] wranges := wg . ranges . Stab ( adt . NewStringAffinePoint ( key ) ) // zero-copy cases switch { case len ( wranges ) == 0 : // no need to merge ranges or copy; reuse single-key set return wkeys case len ( wranges ) == 0 && len ( wkeys ) == 0 : return nil case len ( wranges ) == 1 && len ( wkeys ) == 0 : return wranges [ 0 ] . Val . ( watcherSet ) } // copy case ret := make ( watcherSet ) ret . union ( wg . keyWatchers [ key ] ) for _ , item := range wranges { ret . union ( item . Val . ( watcherSet ) ) } return ret }
// watcherSetByKey gets the set of watchers that receive events on the given key.
watcherSetByKey gets the set of watchers that receive events on the given key .