void CullList::Apply()
{
std::set<classbase*> gone;
+ std::vector<classbase*> queue;
+ queue.reserve(list.size() + 32);
for(unsigned int i=0; i < list.size(); i++)
{
classbase* c = list[i];
{
ServerInstance->Logs->Log("CULLLIST", DEBUG, "Deleting %s @%p", typeid(*c).name(),
(void*)c);
- if (c->cull())
- delete c;
+ c->cull();
+ queue.push_back(c);
}
else
{
(void*)c);
}
}
+ list.clear();
+ for(unsigned int i=0; i < queue.size(); i++)
+ {
+ classbase* c = queue[i];
+ delete c;
+ }
+ if (list.size())
+ {
+ ServerInstance->Logs->Log("CULLLIST",DEBUG, "WARNING: Objects added to cull list in a destructor");
+ Apply();
+ }
}
+void ActionList::Run()
+{
+ for(unsigned int i=0; i < list.size(); i++)
+ {
+ list[i]->Call();
+ }
+ list.clear();
+}