diff options
| author | 2021-05-09 22:45:40 +0100 | |
|---|---|---|
| committer | 2021-05-10 01:46:51 +0100 | |
| commit | ecabf153d01b4cb48944155a638e1cf4c1d80d98 (patch) | |
| tree | 8a1b2773847c0a9bf6ffefff2ae1b8ef4ff95df5 /src/modules/m_codepage.cpp | |
| parent | Switch Channel::ChanModes to use the channel mode map. (diff) | |
Add a new map-based method for building link data.
The new link data is not currently used but will be in the near
future.
Diffstat (limited to 'src/modules/m_codepage.cpp')
| -rw-r--r-- | src/modules/m_codepage.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/src/modules/m_codepage.cpp b/src/modules/m_codepage.cpp index fae2398c5..a2df8cf7e 100644 --- a/src/modules/m_codepage.cpp +++ b/src/modules/m_codepage.cpp @@ -77,7 +77,7 @@ class Codepage virtual bool IsValidNick(const std::string& nick) = 0; // Retrieves the link data for this codepage. - virtual std::string LinkData() const = 0; + virtual void GetLinkData(Module::LinkData& data, std::string& compatdata) const = 0; // Maps an upper case character to a lower case character. virtual bool Map(unsigned long upper, unsigned long lower) = 0; @@ -134,26 +134,28 @@ class SingleByteCodepage final return true; } - std::string LinkData() const override + void GetLinkData(Module::LinkData& data, std::string& compatdata) const override { - std::stringstream linkdata; - - linkdata << "front="; for (size_t i = 0; i < allowedfrontchars.size(); ++i) if (allowedfrontchars[i]) - linkdata << static_cast<unsigned char>(i); + data["front"].push_back(static_cast<unsigned char>(i)); - linkdata << "&middle="; for (size_t i = 0; i < allowedchars.size(); ++i) if (allowedchars[i]) - linkdata << static_cast<unsigned char>(i); + data["middle"].push_back(static_cast<unsigned char>(i)); - linkdata << "&map="; for (size_t i = 0; i < sizeof(casemap); ++i) - if (casemap[i] != i) - linkdata << static_cast<unsigned char>(i) << casemap[i] << ','; + { + if (casemap[i] == i) + continue; + + data["map"].push_back(static_cast<unsigned char>(i)); + data["map"].push_back(casemap[i]); + data["map"].push_back(','); + } - return linkdata.str(); + compatdata = InspIRCd::Format("front=%s&middle=%s&map=%s", data["front"].c_str(), + data["middle"].c_str(), data["map"].c_str()); } bool Map(unsigned long upper, unsigned long lower) override @@ -313,9 +315,9 @@ class ModuleCodepage final CheckRehash(newcodepage->casemap); } - void GetLinkData(std::string& data) override + void GetLinkData(LinkData& data, std::string& compatdata) override { - data.assign(codepage ? codepage->LinkData() : ""); + codepage->GetLinkData(data, compatdata); } }; |
