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  }