aboutsummaryrefslogtreecommitdiff
path: root/src/channels.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2022-05-17 13:02:58 +0100
committerGravatar Sadie Powell2022-05-17 13:02:58 +0100
commitec217059c38f4de854338ccabf669d2a77e6c94d (patch)
tree97b65be2fbc696cfd251b0165a29f09c000deae2 /src/channels.cpp
parentRequire 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.cpp45
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