From dec44e09b85c9c5bd1e87b1f9607429f046a1e64 Mon Sep 17 00:00:00 2001 From: brain Date: Tue, 13 Dec 2005 23:11:37 +0000 Subject: [PATCH] optimized a ton of strcmps down to an integer comparison! git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@2385 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/commands.cpp | 17 ++++++-------- src/helperfuncs.cpp | 2 +- src/message.cpp | 4 ++-- src/modules/m_spanningtree.cpp | 42 +++++++++++++++++----------------- src/xline.cpp | 2 +- 5 files changed, 32 insertions(+), 35 deletions(-) diff --git a/src/commands.cpp b/src/commands.cpp index 55b95dc93..1c4f10470 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -314,7 +314,7 @@ void handle_kill(char **parameters, int pcnt, userrec *user) return; } - if (strcmp(ServerName,u->server)) + if (u->fd < 0) { // remote kill WriteOpers("*** Remote kill by %s: %s!%s@%s (%s)",user->nick,u->nick,u->ident,u->host,parameters[1]); @@ -505,7 +505,7 @@ void handle_topic(char **parameters, int pcnt, userrec *user) topic[MAXTOPIC] = '\0'; } - if (!strcasecmp(user->server,ServerName)) + if (user->fd > -1) { int MOD_RESULT = 0; FOREACH_RESULT(OnLocalTopicChange(user,Ptr,topic)); @@ -517,7 +517,7 @@ void handle_topic(char **parameters, int pcnt, userrec *user) strlcpy(Ptr->setby,user->nick,NICKMAX); Ptr->topicset = TIME; WriteChannel(Ptr,user,"TOPIC %s :%s",Ptr->name, Ptr->topic); - if (!strcasecmp(user->server,ServerName)) + if (user->fd > -1) { FOREACH_MOD OnPostLocalTopicChange(user,Ptr,topic); } @@ -620,12 +620,10 @@ void handle_privmsg(char **parameters, int pcnt, userrec *user) } return; } - - log(DEBUG,"*** PRIVMSG HANDLER"); + dest = Find(parameters[0]); if (dest) { - log(DEBUG,"*** FOUND NICK %s",dest->nick); if (strcmp(dest->awaymsg,"")) { /* auto respond with aweh msg */ @@ -641,10 +639,9 @@ void handle_privmsg(char **parameters, int pcnt, userrec *user) } parameters[1] = (char*)temp.c_str(); - if (!strcmp(dest->server,ServerName)) + if (dest->server > -1) { // direct write, same server - log(DEBUG,"*** CALL WRITETO"); WriteTo(user, dest, "PRIVMSG %s :%s", dest->nick, parameters[1]); } @@ -732,7 +729,7 @@ void handle_notice(char **parameters, int pcnt, userrec *user) } parameters[1] = (char*)temp.c_str(); - if (!strcmp(dest->server,ServerName)) + if (dest->fd > -1) { // direct write, same server WriteTo(user, dest, "NOTICE %s :%s", dest->nick, parameters[1]); @@ -929,7 +926,7 @@ void handle_quit(char **parameters, int pcnt, userrec *user) /* We should only prefix the quit for a local user. Remote users have * already been prefixed, where neccessary, by the upstream server. */ - if (!strcasecmp(user->server,ServerName)) + if (user->fd > -1) { Write(user->fd,"ERROR :Closing link (%s@%s) [%s%s]",user->ident,user->host,PrefixQuit,parameters[0]); WriteOpers("*** Client exiting: %s!%s@%s [%s%s]",user->nick,user->ident,user->host,PrefixQuit,parameters[0]); diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp index 897f9f890..c4c6f397b 100644 --- a/src/helperfuncs.cpp +++ b/src/helperfuncs.cpp @@ -1133,7 +1133,7 @@ long local_count() int c = 0; for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++) { - if ((i->second->fd) && (isnick(i->second->nick)) && (!strcasecmp(i->second->server,ServerName))) c++; + if ((i->second->fd) && (isnick(i->second->nick)) && (i->second->server->fd > -1)) c++; } return c; } diff --git a/src/message.cpp b/src/message.cpp index f55df0ee3..8c03e85f2 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -212,7 +212,7 @@ bool hasumode(userrec* user, char mode) void ChangeName(userrec* user, const char* gecos) { - if (!strcasecmp(user->server,ServerName)) + if (user->fd > -1) { int MOD_RESULT = 0; FOREACH_RESULT(OnChangeLocalUserGECOS(user,gecos)); @@ -225,7 +225,7 @@ void ChangeName(userrec* user, const char* gecos) void ChangeDisplayedHost(userrec* user, const char* host) { - if (!strcasecmp(user->server,ServerName)) + if (user->fd > -1) { int MOD_RESULT = 0; FOREACH_RESULT(OnChangeLocalUserHost(user,host)); diff --git a/src/modules/m_spanningtree.cpp b/src/modules/m_spanningtree.cpp index 4a09ee476..daa7111ee 100644 --- a/src/modules/m_spanningtree.cpp +++ b/src/modules/m_spanningtree.cpp @@ -1405,7 +1405,7 @@ class TreeSocket : public InspSocket if (params.size() == 1) { userrec* x = Srv->FindNick(params[0]); - if (std::string(x->server) == Srv->GetServerName()) + if (x->fd > -1) { userrec* x = Srv->FindNick(params[0]); log(DEBUG,"Got IDLE"); @@ -1431,14 +1431,14 @@ class TreeSocket : public InspSocket { std::string who_did_the_whois = params[0]; userrec* who_to_send_to = Srv->FindNick(who_did_the_whois); - if (std::string(who_to_send_to->server) == Srv->GetServerName()) + if (who_to_send_to->fd > -1) { log(DEBUG,"Got final IDLE"); // an incoming reply to a whois we sent out std::string nick_whoised = prefix; unsigned long signon = atoi(params[1].c_str()); unsigned long idle = atoi(params[2].c_str()); - if ((who_to_send_to) && (std::string(who_to_send_to->server) == Srv->GetServerName())) + if ((who_to_send_to) && (who_to_send_to->fd > -1)) do_whois(who_to_send_to,u,signon,idle,(char*)nick_whoised.c_str()); } else @@ -1962,7 +1962,7 @@ void GetListOfServersForChannel(chanrec* c, std::deque &list) { char* o = (*ulist)[i]; userrec* otheruser = (userrec*)o; - if (std::string(otheruser->server) != Srv->GetServerName()) + if (otheruser->fd < 0) { TreeServer* best = BestRouteTo(otheruser->server); if (best) @@ -2318,10 +2318,10 @@ class ModuleSpanningTree : public Module int HandleRemoteWhois(char** parameters, int pcnt, userrec* user) { - if ((std::string(user->server) == Srv->GetServerName()) && (pcnt > 1)) + if ((user->fd > -1) && (pcnt > 1)) { userrec* remote = Srv->FindNick(parameters[1]); - if ((remote) && (std::string(remote->server) != Srv->GetServerName())) + if ((remote) && (remote->fd < 0)) { std::deque params; params.push_back(parameters[1]); @@ -2521,7 +2521,7 @@ class ModuleSpanningTree : public Module virtual void OnUserInvite(userrec* source,userrec* dest,chanrec* channel) { - if (std::string(source->server) == Srv->GetServerName()) + if (source->fd > -1) { std::deque params; params.push_back(dest->nick); @@ -2540,7 +2540,7 @@ class ModuleSpanningTree : public Module virtual void OnWallops(userrec* user, std::string text) { - if (std::string(user->server) == Srv->GetServerName()) + if (user->fd > -1) { std::deque params; params.push_back(":"+text); @@ -2553,7 +2553,7 @@ class ModuleSpanningTree : public Module if (target_type == TYPE_USER) { userrec* d = (userrec*)dest; - if ((std::string(d->server) != Srv->GetServerName()) && (std::string(user->server) == Srv->GetServerName())) + if ((d->fd < 0) && (user->fd > -1)) { std::deque params; params.clear(); @@ -2564,7 +2564,7 @@ class ModuleSpanningTree : public Module } else { - if (std::string(user->server) == Srv->GetServerName()) + if (user->fd > -1) { chanrec *c = (chanrec*)dest; std::deque list; @@ -2587,7 +2587,7 @@ class ModuleSpanningTree : public Module // route private messages which are targetted at clients only to the server // which needs to receive them userrec* d = (userrec*)dest; - if ((std::string(d->server) != Srv->GetServerName()) && (std::string(user->server) == Srv->GetServerName())) + if ((d->fd < 0) && (user->fd > -1)) { std::deque params; params.clear(); @@ -2598,7 +2598,7 @@ class ModuleSpanningTree : public Module } else { - if (std::string(user->server) == Srv->GetServerName()) + if (user->fd > -1) { chanrec *c = (chanrec*)dest; std::deque list; @@ -2623,7 +2623,7 @@ class ModuleSpanningTree : public Module virtual void OnUserJoin(userrec* user, chanrec* channel) { // Only do this for local users - if (std::string(user->server) == Srv->GetServerName()) + if (user->fd > -1) { std::deque params; params.clear(); @@ -2675,7 +2675,7 @@ class ModuleSpanningTree : public Module virtual void OnUserPart(userrec* user, chanrec* channel) { - if (std::string(user->server) == Srv->GetServerName()) + if (user->fd > -1) { std::deque params; params.push_back(channel->name); @@ -2686,7 +2686,7 @@ class ModuleSpanningTree : public Module virtual void OnUserConnect(userrec* user) { char agestr[MAXBUF]; - if (std::string(user->server) == Srv->GetServerName()) + if (user->fd > -1) { std::deque params; snprintf(agestr,MAXBUF,"%lu",(unsigned long)user->age); @@ -2704,7 +2704,7 @@ class ModuleSpanningTree : public Module virtual void OnUserQuit(userrec* user, std::string reason) { - if ((std::string(user->server) == Srv->GetServerName()) && (user->registered == 7)) + if ((user->fd > -1) && (user->registered == 7)) { std::deque params; params.push_back(":"+reason); @@ -2714,7 +2714,7 @@ class ModuleSpanningTree : public Module virtual void OnUserPostNick(userrec* user, std::string oldnick) { - if (std::string(user->server) == Srv->GetServerName()) + if (user->fd > -1) { std::deque params; params.push_back(user->nick); @@ -2724,7 +2724,7 @@ class ModuleSpanningTree : public Module virtual void OnUserKick(userrec* source, userrec* user, chanrec* chan, std::string reason) { - if (std::string(source->server) == Srv->GetServerName()) + if (source->server > -1) { std::deque params; params.push_back(chan->name); @@ -2764,7 +2764,7 @@ class ModuleSpanningTree : public Module // locally. virtual void OnOper(userrec* user, std::string opertype) { - if (std::string(user->server) == Srv->GetServerName()) + if (user->fd > -1) { std::deque params; params.push_back(opertype); @@ -2774,7 +2774,7 @@ class ModuleSpanningTree : public Module void OnLine(userrec* source, std::string host, bool adding, char linetype, long duration, std::string reason) { - if (std::string(source->server) == Srv->GetServerName()) + if (source->fd > -1) { char type[8]; snprintf(type,8,"%cLINE",linetype); @@ -2840,7 +2840,7 @@ class ModuleSpanningTree : public Module virtual void OnMode(userrec* user, void* dest, int target_type, std::string text) { - if ((std::string(user->server) == Srv->GetServerName()) && (user->registered == 7)) + if ((user->fd > -1) && (user->registered == 7)) { if (target_type == TYPE_USER) { diff --git a/src/xline.cpp b/src/xline.cpp index ffe38c94d..434aaeeb1 100644 --- a/src/xline.cpp +++ b/src/xline.cpp @@ -702,7 +702,7 @@ void apply_lines() go_again = false; for (user_hash::const_iterator u = clientlist.begin(); u != clientlist.end(); u++) { - if (!strcasecmp(u->second->server,ServerName)) + if (u->second->server > -1) { snprintf(host,MAXBUF,"%s@%s",u->second->ident,u->second->host); if (elines.size()) -- 2.39.5