aboutsummaryrefslogtreecommitdiffstats
path: root/src/channels.cpp
diff options
context:
space:
mode:
authorGravatar brain2006-09-27 07:50:43 +0000
committerGravatar brain2006-09-27 07:50:43 +0000
commit9c322ab976d05b80df7b2e86281b6531bb85ae25 (patch)
treed370ddba0b73ee9f1c9d4b6f370f86af041acb70 /src/channels.cpp
parentOptimizations (diff)
downloadinspircd++-9c322ab976d05b80df7b2e86281b6531bb85ae25.tar.gz
inspircd++-9c322ab976d05b80df7b2e86281b6531bb85ae25.tar.bz2
inspircd++-9c322ab976d05b80df7b2e86281b6531bb85ae25.zip
Because the user's prefix list must remain sorted at all times (because of assumptions in xchat) this means that we don't need to scan the list looking for their highest prefix, it will always be at begin(). This changes the speed of GetPrefix() and GetPrefixValue() from O(n) to O(1).
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5348 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/channels.cpp')
-rw-r--r--src/channels.cpp32
1 files changed, 10 insertions, 22 deletions
diff --git a/src/channels.cpp b/src/channels.cpp
index 353798e96..5e2ef907c 100644
--- a/src/channels.cpp
+++ b/src/channels.cpp
@@ -885,26 +885,20 @@ long chanrec::GetMaxBans()
*/
const char* chanrec::GetPrefixChar(userrec *user)
{
- static char px[2];
- unsigned int mx = 0;
-
- *px = 0;
- *(px+1) = 0;
-
+ static char pf[2] = {0, 0};
+
prefixlist::iterator n = prefixes.find(user);
if (n != prefixes.end())
{
- for (std::vector<prefixtype>::iterator x = n->second.begin(); x != n->second.end(); x++)
+ if (n->second.size())
{
- if (x->second > mx)
- {
- *px = x->first;
- mx = x->second;
- }
+ *pf = n->second.begin()->first;
+ return pf;
}
}
- return px;
+ *pf = 0;
+ return pf;
}
const char* chanrec::GetAllPrefixChars(userrec* user)
@@ -929,19 +923,13 @@ const char* chanrec::GetAllPrefixChars(userrec* user)
unsigned int chanrec::GetPrefixValue(userrec* user)
{
- unsigned int mx = 0;
-
prefixlist::iterator n = prefixes.find(user);
if (n != prefixes.end())
{
- for (std::vector<prefixtype>::iterator x = n->second.begin(); x != n->second.end(); x++)
- {
- if (x->second > mx)
- mx = x->second;
- }
+ if (n->second.size())
+ return n->second.begin()->second;
}
-
- return mx;
+ return 0;
}