aboutsummaryrefslogtreecommitdiffstats
path: root/src/mode.cpp
diff options
context:
space:
mode:
authorGravatar attilamolnar2013-05-24 18:22:25 +0200
committerGravatar attilamolnar2013-05-24 18:22:25 +0200
commit1911857e3a566bd7907492a6718ae620d70959ba (patch)
tree180ece588d91af6dcacbc6a752f81407a213c0a0 /src/mode.cpp
parentRemove dead ModeParser code (diff)
downloadinspircd++-1911857e3a566bd7907492a6718ae620d70959ba.tar.gz
inspircd++-1911857e3a566bd7907492a6718ae620d70959ba.tar.bz2
inspircd++-1911857e3a566bd7907492a6718ae620d70959ba.zip
Cache mode list that is sent in the 004 numeric
Deduplicate UserModeList(), ChannelModeList() and ParaModeList() code
Diffstat (limited to 'src/mode.cpp')
-rw-r--r--src/mode.cpp45
1 files changed, 10 insertions, 35 deletions
diff --git a/src/mode.cpp b/src/mode.cpp
index 3da983627..b4bb72c42 100644
--- a/src/mode.cpp
+++ b/src/mode.cpp
@@ -613,6 +613,7 @@ bool ModeParser::AddMode(ModeHandler* mh)
return false;
modehandlers[pos] = mh;
+ RecreateModeListFor004Numeric();
return true;
}
@@ -655,6 +656,7 @@ bool ModeParser::DelMode(ModeHandler* mh)
}
modehandlers[pos] = NULL;
+ RecreateModeListFor004Numeric();
return true;
}
@@ -673,52 +675,25 @@ ModeHandler* ModeParser::FindMode(unsigned const char modeletter, ModeType mt)
return modehandlers[pos];
}
-std::string ModeParser::UserModeList()
+std::string ModeParser::CreateModeList(ModeType mt, bool needparam)
{
- char modestr[256];
- int pointer = 0;
+ std::string modestr;
+ unsigned char mask = ((mt == MODETYPE_CHANNEL) ? MASK_CHANNEL : MASK_USER);
for (unsigned char mode = 'A'; mode <= 'z'; mode++)
{
- unsigned char pos = (mode-65) | MASK_USER;
+ unsigned char pos = (mode-65) | mask;
- if (modehandlers[pos])
- modestr[pointer++] = mode;
+ if ((modehandlers[pos]) && ((!needparam) || (modehandlers[pos]->GetNumParams(true))))
+ modestr.push_back(mode);
}
- modestr[pointer++] = 0;
- return modestr;
-}
-
-std::string ModeParser::ChannelModeList()
-{
- char modestr[256];
- int pointer = 0;
-
- for (unsigned char mode = 'A'; mode <= 'z'; mode++)
- {
- unsigned char pos = (mode-65) | MASK_CHANNEL;
- if (modehandlers[pos])
- modestr[pointer++] = mode;
- }
- modestr[pointer++] = 0;
return modestr;
}
-std::string ModeParser::ParaModeList()
+void ModeParser::RecreateModeListFor004Numeric()
{
- char modestr[256];
- int pointer = 0;
-
- for (unsigned char mode = 'A'; mode <= 'z'; mode++)
- {
- unsigned char pos = (mode-65) | MASK_CHANNEL;
-
- if ((modehandlers[pos]) && (modehandlers[pos]->GetNumParams(true)))
- modestr[pointer++] = mode;
- }
- modestr[pointer++] = 0;
- return modestr;
+ Cached004ModeList = CreateModeList(MODETYPE_USER) + " " + CreateModeList(MODETYPE_CHANNEL) + " " + CreateModeList(MODETYPE_CHANNEL, true);
}
ModeHandler* ModeParser::FindPrefix(unsigned const char pfxletter)