diff options
author | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-01-09 12:20:21 +0000 |
---|---|---|
committer | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-01-09 12:20:21 +0000 |
commit | 6f84254ed6681c79d606679cecb9420d394c8c47 (patch) | |
tree | ae04cac3da6e7bb459fbe0d4ee323c65476c62d3 /src | |
parent | 5f90329e3053edb1cf85a2bad521a6b2cf3e1256 (diff) |
Add OnExpireLine(XLine *) hook, will be used in xline db stuff to avoid getting a fucked up vector
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8676 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r-- | src/modules.cpp | 1 | ||||
-rw-r--r-- | src/xline.cpp | 28 |
2 files changed, 16 insertions, 13 deletions
diff --git a/src/modules.cpp b/src/modules.cpp index 2233c985d..a699cb41b 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -180,6 +180,7 @@ void Module::OnChangeHost(User*, const std::string&) { } void Module::OnChangeName(User*, const std::string&) { } void Module::OnAddLine(User*, XLine*) { } void Module::OnDelLine(User*, XLine*) { } +void Module::OnExpireLine(XLine*) { } void Module::OnCleanup(int, void*) { } int Module::OnChannelPreDelete(Channel*) { return 0; } void Module::OnChannelDelete(Channel*) { } diff --git a/src/xline.cpp b/src/xline.cpp index a77f7dc0b..1dda8dac0 100644 --- a/src/xline.cpp +++ b/src/xline.cpp @@ -289,19 +289,21 @@ XLine* XLineManager::MatchesLine(const std::string &type, const std::string &pat // removes lines that have expired void XLineManager::ExpireLine(ContainerIter container, LookupIter item) { - item->second->DisplayExpiry(); - item->second->Unset(); - - /* TODO: Can we skip this loop by having a 'pending' field in the XLine class, which is set when a line - * is pending, cleared when it is no longer pending, so we skip over this loop if its not pending? - * -- Brain - */ - std::vector<XLine*>::iterator pptr = std::find(pending_lines.begin(), pending_lines.end(), item->second); - if (pptr != pending_lines.end()) - pending_lines.erase(pptr); - - delete item->second; - container->second.erase(item); + FOREACH_MOD(I_OnExpireLine, OnExpireLine(item->second)); + + item->second->DisplayExpiry(); + item->second->Unset(); + + /* TODO: Can we skip this loop by having a 'pending' field in the XLine class, which is set when a line + * is pending, cleared when it is no longer pending, so we skip over this loop if its not pending? + * -- Brain + */ + std::vector<XLine*>::iterator pptr = std::find(pending_lines.begin(), pending_lines.end(), item->second); + if (pptr != pending_lines.end()) + pending_lines.erase(pptr); + + delete item->second; + container->second.erase(item); } |