diff options
| author | 2022-05-17 13:02:58 +0100 | |
|---|---|---|
| committer | 2022-05-17 13:02:58 +0100 | |
| commit | ec217059c38f4de854338ccabf669d2a77e6c94d (patch) | |
| tree | 97b65be2fbc696cfd251b0165a29f09c000deae2 /src/channels.cpp | |
| parent | Require specifying the repeat argument of the Timer class. (diff) | |
Store a set of list mode pointers in Membership instead of characters.
Diffstat (limited to 'src/channels.cpp')
| -rw-r--r-- | src/channels.cpp | 45 |
1 files changed, 16 insertions, 29 deletions
diff --git a/src/channels.cpp b/src/channels.cpp index 78fab90f2..0e75bdee6 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -443,10 +443,9 @@ char Membership::GetPrefixChar() const char pf = 0; unsigned int bestrank = 0; - for (const auto& modechr : modes) + for (const auto& mh : modes) { - PrefixMode* mh = ServerInstance->Modes.FindPrefixMode(modechr); - if (mh && mh->GetPrefixRank() > bestrank && mh->GetPrefix()) + if (mh->GetPrefixRank() > bestrank && mh->GetPrefix()) { bestrank = mh->GetPrefixRank(); pf = mh->GetPrefix(); @@ -455,25 +454,25 @@ char Membership::GetPrefixChar() const return pf; } -unsigned int Membership::GetRank() +std::string Membership::GetAllPrefixChars() const { - if (!modes.empty()) + std::string ret; + for (const auto& mh : modes) { - PrefixMode* mh = ServerInstance->Modes.FindPrefixMode(modes[0]); - if (mh) - return mh->GetPrefixRank(); + if (mh->GetPrefix()) + ret.push_back(mh->GetPrefix()); } - return 0; + + return ret; } -std::string Membership::GetAllPrefixChars() const +std::string Membership::GetAllPrefixModes() const { std::string ret; - for (const auto& modechr : modes) + for (const auto& mh : modes) { - PrefixMode* mh = ServerInstance->Modes.FindPrefixMode(modechr); - if (mh && mh->GetPrefix()) - ret.push_back(mh->GetPrefix()); + if (mh->GetModeChar()) + ret.push_back(mh->GetModeChar()); } return ret; @@ -489,22 +488,10 @@ unsigned int Channel::GetPrefixValue(User* user) bool Membership::SetPrefix(PrefixMode* delta_mh, bool adding) { - char prefix = delta_mh->GetModeChar(); - for (unsigned int i = 0; i < modes.length(); i++) - { - char mchar = modes[i]; - PrefixMode* mh = ServerInstance->Modes.FindPrefixMode(mchar); - if (mh && mh->GetPrefixRank() <= delta_mh->GetPrefixRank()) - { - modes = modes.substr(0,i) + - (adding ? std::string(1, prefix) : "") + - modes.substr(mchar == prefix ? i+1 : i); - return adding != (mchar == prefix); - } - } if (adding) - modes.push_back(prefix); - return adding; + return modes.insert(delta_mh).second; + else + return modes.erase(delta_mh); } void Membership::WriteNotice(const std::string& text) const |
