BOHGE_FORCEINLINE void Remove(FunctionPtr ptr) { FunctionIterator it = m_FuncMap.find( (int)ptr ); if ( m_FuncMap.end() != it ) { m_FuncMap.erase( it ); } }
BOHGE_FORCEINLINE R Unicast(void* to, EVENT_PARAM_TYPES_INPUTS )//单播 { FunctionIterator it = m_FuncMap.find( (int)to ); if ( m_FuncMap.end() != it ) { it->second->Invoker(EVENT_PARAM_INPUTS); } }
BOHGE_FORCEINLINE void ClearConnect() { for(FunctionIterator it = m_FuncMap.begin(); it != m_FuncMap.end(); it++) { SAFE_DELETE( it->second ); } m_FuncMap.clear(); }
BOHGE_FORCEINLINE void Multicast( EVENT_PARAM_TYPES_INPUTS ) //多播不支持返回数值 { for(FunctionIterator it = m_FuncMap.begin(); it != m_FuncMap.end(); ) { FunctionIterator temp = it;//这么做为了在callback的时候删除自己的callback it ++; temp->second->Invoker(EVENT_PARAM_INPUTS); } }
BOHGE_FORCEINLINE unsigned int GetListenerCount() { return m_FuncMap.size(); }
BOHGE_FORCEINLINE void RemoveAll() { m_FuncMap.clear(); }
BOHGE_FORCEINLINE FunctionPtr Connect( FunctionType* const input ) { m_FuncMap.insert( std::make_pair( (int)input, input ) ); return input; }
BOHGE_FORCEINLINE FunctionPtr Connect(IFUNCTION_CLASS<R, EVENT_PARAM_TYPES>* const input) { m_FuncMap.insert( std::make_pair( (int)input, input ) ); return input; }