]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_alias.cpp
Remove UserManager::GarbageCollect()
[user/henk/code/inspircd.git] / src / modules / m_alias.cpp
index 2d4bdded30fa70515972fb827bd0034ba1a41440..1076b0a9a12c88d113b27648bc13510dcaba4071 100644 (file)
@@ -57,13 +57,13 @@ class Alias
 
 class ModuleAlias : public Module
 {
-       char fprefix;
+       std::string fprefix;
 
        /* We cant use a map, there may be multiple aliases with the same name.
         * We can, however, use a fancy invention: the multimap. Maps a key to one or more values.
         *              -- w00t
      */
-       typedef std::multimap<std::string, Alias, irc::insensitive_swo> AliasMap;
+       typedef insp::flat_multimap<std::string, Alias, irc::insensitive_swo> AliasMap;
 
        AliasMap Aliases;
 
@@ -76,8 +76,8 @@ class ModuleAlias : public Module
        {
                ConfigTag* fantasy = ServerInstance->Config->ConfValue("fantasy");
                AllowBots = fantasy->getBool("allowbots", false);
-               std::string fpre = fantasy->getString("prefix", "!");
-               fprefix = fpre.empty() ? '!' : fpre[0];
+               std::string fpre = fantasy->getString("prefix");
+               fprefix = fpre.empty() ? "!" : fpre;
 
                Aliases.clear();
                ConfigTagList tags = ServerInstance->Config->ConfTags("alias");
@@ -148,7 +148,7 @@ class ModuleAlias : public Module
                        return MOD_RES_PASSTHRU;
 
                /* The parameters for the command in their original form, with the command stripped off */
-               std::string compare = original_line.substr(command.length());
+               std::string compare(original_line, command.length());
                while (*(compare.c_str()) == ' ')
                        compare.erase(compare.begin());
 
@@ -193,26 +193,26 @@ class ModuleAlias : public Module
                irc::spacesepstream ss(text);
                ss.GetToken(scommand);
 
-               if (scommand.empty())
+               if (scommand.size() <= fprefix.size())
                {
                        return; // wtfbbq
                }
 
                // we don't want to touch non-fantasy stuff
-               if (*scommand.c_str() != fprefix)
+               if (scommand.compare(0, fprefix.size(), fprefix) != 0)
                {
                        return;
                }
 
                // nor do we give a shit about the prefix
-               scommand.erase(scommand.begin());
+               scommand.erase(0, fprefix.size());
 
                std::pair<AliasMap::iterator, AliasMap::iterator> iters = Aliases.equal_range(scommand);
                if (iters.first == iters.second)
                        return;
 
                /* The parameters for the command in their original form, with the command stripped off */
-               std::string compare = text.substr(scommand.length() + 1);
+               std::string compare(text, scommand.length() + fprefix.size());
                while (*(compare.c_str()) == ' ')
                        compare.erase(compare.begin());
 
@@ -220,8 +220,8 @@ class ModuleAlias : public Module
                {
                        if (i->second.ChannelCommand)
                        {
-                               // We use substr(1) here to remove the fantasy prefix
-                               if (DoAlias(user, c, &(i->second), compare, text.substr(1)))
+                               // We use substr here to remove the fantasy prefix
+                               if (DoAlias(user, c, &(i->second), compare, text.substr(fprefix.size())))
                                        return;
                        }
                }
@@ -351,7 +351,7 @@ class ModuleAlias : public Module
        {
                // Prioritise after spanningtree so that channel aliases show the alias before the effects.
                Module* linkmod = ServerInstance->Modules->Find("m_spanningtree.so");
-               ServerInstance->Modules->SetPriority(this, I_OnUserMessage, PRIORITY_AFTER, &linkmod);
+               ServerInstance->Modules->SetPriority(this, I_OnUserMessage, PRIORITY_AFTER, linkmod);
        }
 };