some micro optimisations in SearchEventTable

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6707 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2000-03-14 18:46:17 +00:00
parent 5301d93336
commit 68662769ff

View File

@@ -797,35 +797,40 @@ bool wxEvtHandler::ProcessEvent(wxEvent& event)
bool wxEvtHandler::SearchEventTable(wxEventTable& table, wxEvent& event)
{
int i = 0;
int commandId = event.GetId();
wxEventType eventType = event.GetEventType();
int eventId = event.GetId();
// BC++ doesn't like while (table.entries[i].m_fn)
#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;
(this->*((wxEventFunction) (table.entries[i].m_fn)))(event);
if ( (tableId1 == -1) ||
(tableId2 == -1 && eventId == tableId1) ||
(tableId2 != -1 &&
(eventId >= tableId1 && eventId <= tableId2)) )
{
event.Skip(FALSE);
event.m_callbackUserData = entry.m_callbackUserData;
if ( event.GetSkipped() )
return FALSE;
else
return TRUE;
(this->*((wxEventFunction) (entry.m_fn)))(event);
return !event.GetSkipped();
}
}
i++;
}
return FALSE;
}