ultimatepp/bazaar/Dispatcher/Dispatcher.cpp
kohait 0f31efcc6c bazaar: Dispatcher cleanup and fixes
git-svn-id: svn://ultimatepp.org/upp/trunk@3737 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2011-08-04 21:02:18 +00:00

43 lines
747 B
C++

#include "Dispatcher.hpp"
//Dispatcher0
void Dispatcher0::DoDispatch() const
{
if(!R::IsEnabled()) return;
for(int i = 0; i < dests.GetCount(); i++)
dests[i]();
}
void Dispatcher0::Register(Callback d, unsigned key)
{
int i = dests.Find(key);
if(i>=0) return;
dests.Add(key) = d;
}
void Dispatcher0::Unregister(unsigned key)
{
int i = dests.Find(key);
if(i<0) return;
dests.Remove(i);
}
Callback* Dispatcher0::GetDispatchable(unsigned key)
{
int i = dests.Find(key);
if(i<0) return NULL;
return &dests[i];
}
//DispatcherL0
void DispatcherL0::DoDispatch() const
{
int c = 0;
const Handler *list = dests.GetPtr(), *e = list;
while((e = e->GetNext()) != list)
{
e->h(); ++c;
}
}