diff options
author | linuxdaemon <linuxdaemon@snoonet.org> | 2019-03-12 09:48:28 -0500 |
---|---|---|
committer | Peter Powell <petpow@saberuk.com> | 2019-03-12 17:14:53 +0000 |
commit | dfb1e0da7823641ad648f9fbd19b43d2e6b0d7ad (patch) | |
tree | 7ef8b5ae60b08765f6e2e04fa43b5a954dbcf87e /src/coremods | |
parent | f87b72b76f9ef198bdbbb01f9ca409501666c6a2 (diff) |
Add Who::Request::GetFlagIndex to get field index
Replaces the dirty logic in m_hideoper and m_namesx
Diffstat (limited to 'src/coremods')
-rw-r--r-- | src/coremods/core_who.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/coremods/core_who.cpp b/src/coremods/core_who.cpp index bf00b741f..f32ef77b3 100644 --- a/src/coremods/core_who.cpp +++ b/src/coremods/core_who.cpp @@ -34,8 +34,19 @@ enum RPL_WHOSPCRPL = 354 }; +static const char whox_field_order[] = "tcuihsnfdlaor"; +static const char who_field_order[] = "cuhsnf"; + struct WhoData : public Who::Request { + std::string query_flag_order; + + bool GetFlagIndex(char flag, size_t& out) const CXX11_OVERRIDE + { + out = query_flag_order.find(flag); + return out != std::string::npos; + } + WhoData(const CommandBase::Params& parameters) { // Find the matchtext and swap the 0 for a * so we can use InspIRCd::Match on it. @@ -74,6 +85,17 @@ struct WhoData : public Who::Request current_bitset->set(chr); } } + + if (whox) + { + for (const char *c = whox_field_order; c; c++) + { + if (whox_fields[*c]) + query_flag_order.push_back(*c); + } + } + else + query_flag_order = who_field_order; } }; |