From: Vadim Zeitlin Date: Tue, 14 Mar 2000 18:46:17 +0000 (+0000) Subject: some micro optimisations in SearchEventTable X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/68662769ff95f11208319be6fa303bfdd6d8331a some micro optimisations in SearchEventTable git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6707 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/event.cpp b/src/common/event.cpp index d770701860..ca7605d9b9 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -797,35 +797,40 @@ bool wxEvtHandler::ProcessEvent(wxEvent& event) bool wxEvtHandler::SearchEventTable(wxEventTable& table, wxEvent& event) { - int i = 0; - int commandId = event.GetId(); - - // BC++ doesn't like while (table.entries[i].m_fn) + wxEventType eventType = event.GetEventType(); + int eventId = event.GetId(); -#ifdef __SC__ - while (table.entries[i].m_fn != 0) -#else - while (table.entries[i].m_fn != 0L) -#endif + // BC++ doesn't like testing for m_fn without != 0 + for ( int i = 0; table.entries[i].m_fn != 0; i++ ) { - if ((event.GetEventType() == table.entries[i].m_eventType) && - (table.entries[i].m_id == -1 || // Match, if event spec says any id will do (id == -1) - (table.entries[i].m_lastId == -1 && commandId == table.entries[i].m_id) || - (table.entries[i].m_lastId != -1 && - (commandId >= table.entries[i].m_id && commandId <= table.entries[i].m_lastId)))) + const wxEventTableEntry& entry = table.entries[i]; + + // match only if the event type is the same and the id is either -1 in + // the event table (meaning "any") or the event id matches the id + // specified in the event table either exactly or by falling into + // range between first and last + if ( eventType == entry.m_eventType ) { - event.Skip(FALSE); - event.m_callbackUserData = table.entries[i].m_callbackUserData; + int tableId1 = entry.m_id, + tableId2 = entry.m_lastId; + + if ( (tableId1 == -1) || + (tableId2 == -1 && eventId == tableId1) || + (tableId2 != -1 && + (eventId >= tableId1 && eventId <= tableId2)) ) + { + event.Skip(FALSE); + event.m_callbackUserData = entry.m_callbackUserData; - (this->*((wxEventFunction) (table.entries[i].m_fn)))(event); + (this->*((wxEventFunction) (entry.m_fn)))(event); - if ( event.GetSkipped() ) - return FALSE; - else - return TRUE; + return !event.GetSkipped(); + } } + i++; } + return FALSE; }