github.com/dfklegend/cell2/utils@v0.0.0-20240402033734-a0a9f3d9335d/event/light/list.go (about) 1 package light 2 3 type ListenerList struct { 4 Listeners map[uint64]*EListener 5 } 6 7 func NewListenerList() *ListenerList { 8 return &ListenerList{ 9 Listeners: make(map[uint64]*EListener), 10 } 11 } 12 13 func (li *ListenerList) Add(l *EListener) { 14 li.Listeners[l.Id] = l 15 } 16 17 func (li *ListenerList) Del(id uint64) { 18 delete(li.Listeners, id) 19 } 20 21 func (li *ListenerList) GetSize() int { 22 return len(li.Listeners) 23 } 24 25 func (li *ListenerList) FindId(cb CBFunc) uint64 { 26 pointer := toPointer(cb) 27 for k, v := range li.Listeners { 28 if pointer == v.GetCBPointer() { 29 return k 30 } 31 } 32 return 0 33 } 34 35 // FindIdWithReceiver 36 // 对象的Pointer是否会改变? 37 func (li *ListenerList) FindIdWithReceiver(receiver any, cb CBFunc) uint64 { 38 pointer := toPointer(cb) 39 for k, v := range li.Listeners { 40 if v.Receiver != nil { 41 if pointer == v.GetCBPointer() && receiver == v.Receiver { 42 return k 43 } 44 } else { 45 if pointer == v.GetCBPointer() { 46 return k 47 } 48 } 49 50 } 51 return 0 52 }