summaryrefslogtreecommitdiff
path: root/src/channels.cpp
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-12-30 15:11:40 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-12-30 15:11:40 +0000
commit6fff3c54be91dbbfe5e3ffca4204ad0378d70b7d (patch)
tree7c10778fc957a26c2e9b00882459e163aa548f40 /src/channels.cpp
parentfce2d243c023660a9afbf01143cde6eda2ec7a88 (diff)
Tons of optimization of WriteChannel, WriteChannelWithServ, WriteCommon etc, dont call userrec::GetFullHost or snprintf for every item, call it just once.
Turns O(n) calls for every write into O(~1) calls per write. Remove some debug from the socketengines which makes debugging hard on large channels (write availability message) git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6171 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/channels.cpp')
-rw-r--r--src/channels.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/channels.cpp b/src/channels.cpp
index ea7edd71f..df1f77976 100644
--- a/src/channels.cpp
+++ b/src/channels.cpp
@@ -612,14 +612,17 @@ void chanrec::WriteChannel(userrec* user, char* text, ...)
void chanrec::WriteChannel(userrec* user, const std::string &text)
{
CUList *ulist = this->GetUsers();
+ char tb[MAXBUF];
if (!user)
return;
+ snprintf(tb,MAXBUF,":%s %s",user->GetFullHost(),text.c_str());
+
for (CUList::iterator i = ulist->begin(); i != ulist->end(); i++)
{
if (IS_LOCAL(i->second))
- user->WriteTo(i->second,text);
+ i->second->Write(std::string(tb));
}
}
@@ -684,6 +687,7 @@ void chanrec::WriteAllExcept(userrec* user, bool serversource, char status, CULi
void chanrec::WriteAllExcept(userrec* user, bool serversource, char status, CUList &except_list, const std::string &text)
{
CUList *ulist;
+ char tb[MAXBUF];
switch (status)
{
@@ -701,6 +705,8 @@ void chanrec::WriteAllExcept(userrec* user, bool serversource, char status, CULi
break;
}
+ snprintf(tb,MAXBUF,":%s %s",user->GetFullHost(),text.c_str());
+
for (CUList::iterator i = ulist->begin(); i != ulist->end(); i++)
{
if ((IS_LOCAL(i->second)) && (except_list.find(i->second) == except_list.end()))
@@ -708,7 +714,7 @@ void chanrec::WriteAllExcept(userrec* user, bool serversource, char status, CULi
if (serversource)
i->second->WriteServ(text);
else
- i->second->WriteFrom(user,text);
+ i->second->Write(std::string(tb));
}
}
}