diff options
author | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2009-04-17 21:47:30 +0000 |
---|---|---|
committer | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2009-04-17 21:47:30 +0000 |
commit | e988ac11a2fb6f8db35f2e645e519678135c1587 (patch) | |
tree | 008546a1d7feb37ca6410e09c6dc39a250e7a899 | |
parent | 83c2e15a7de4abed1e286d9e0758a9d92ddbb480 (diff) |
Fix CullList to not use O(n^2) version of vector clear
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11312 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | include/cull_list.h | 3 | ||||
-rw-r--r-- | src/cull_list.cpp | 15 |
2 files changed, 5 insertions, 13 deletions
diff --git a/include/cull_list.h b/include/cull_list.h index 3a78bf96d..2a0b895f2 100644 --- a/include/cull_list.h +++ b/include/cull_list.h @@ -66,9 +66,8 @@ class CoreExport CullList : public classbase * iterating the user list and comparing each one, * especially if there are multiple comparisons * to be done, or recursion. - * @returns The number of users removed from IRC. */ - int Apply(); + void Apply(); }; #endif diff --git a/src/cull_list.cpp b/src/cull_list.cpp index a1881fe3d..07649ed81 100644 --- a/src/cull_list.cpp +++ b/src/cull_list.cpp @@ -18,7 +18,6 @@ CullList::CullList(InspIRCd* Instance) : ServerInstance(Instance) { - list.clear(); } void CullList::AddItem(User* user) @@ -32,15 +31,11 @@ void CullList::MakeSilent(User* user) return; } -int CullList::Apply() +void CullList::Apply() { - int n = list.size(); - - while (list.size()) + for(std::vector<User *>::iterator a = list.begin(); a != list.end(); a++) { - std::vector<User *>::iterator a = list.begin(); - - User *u = (*a); + User *u = *a; // user has been moved onto their UID; that's why this isn't find(u->nick) user_hash::iterator iter = ServerInstance->Users->clientlist->find(u->uuid); @@ -113,9 +108,7 @@ int CullList::Apply() } delete u; - list.erase(list.begin()); } - - return n; + list.clear(); } |