コード例 #1
0
ファイル: subscriptions.go プロジェクト: secondbit/peter
func (s *subscriptionMap) insert(t Topic, id wendy.NodeID) bool {
	s.Lock()
	defer s.Unlock()
	if ids, set := s.items[t]; set {
		for _, i := range ids {
			if id.Equals(i) {
				return false
			}
		}
		s.items[t] = append(s.items[t], id)
	} else {
		s.items[t] = []wendy.NodeID{id}
	}
	return true
}
コード例 #2
0
ファイル: subscriptions.go プロジェクト: secondbit/peter
func (s *subscriptionMap) unsafeRemove(t Topic, id wendy.NodeID) (removed, empty bool) {
	if ids, set := s.items[t]; set {
		for pos, i := range ids {
			if id.Equals(i) {
				empty := false
				if len(s.items[t]) == 1 {
					s.items[t] = []wendy.NodeID{}
					empty = true
				} else if pos == 0 {
					s.items[t] = s.items[t][1:]
				} else if pos+1 == len(s.items[t]) {
					s.items[t] = s.items[t][:pos]
				} else {
					s.items[t] = append(s.items[t][:pos], s.items[t][pos+1:]...)
				}
				return true, empty
			}
		}
	}
	return false, false
}