diff options
| author | 2013-05-24 18:22:25 +0200 | |
|---|---|---|
| committer | 2013-05-24 18:22:25 +0200 | |
| commit | 1911857e3a566bd7907492a6718ae620d70959ba (patch) | |
| tree | 180ece588d91af6dcacbc6a752f81407a213c0a0 /src/mode.cpp | |
| parent | Remove dead ModeParser code (diff) | |
| download | inspircd++-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.cpp | 45 |
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) |
