From ecabf153d01b4cb48944155a638e1cf4c1d80d98 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sun, 9 May 2021 22:45:40 +0100 Subject: 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. --- src/modules/m_codepage.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'src/modules/m_codepage.cpp') 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(i); + data["front"].push_back(static_cast(i)); - linkdata << "&middle="; for (size_t i = 0; i < allowedchars.size(); ++i) if (allowedchars[i]) - linkdata << static_cast(i); + data["middle"].push_back(static_cast(i)); - linkdata << "&map="; for (size_t i = 0; i < sizeof(casemap); ++i) - if (casemap[i] != i) - linkdata << static_cast(i) << casemap[i] << ','; + { + if (casemap[i] == i) + continue; + + data["map"].push_back(static_cast(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); } }; -- cgit v1.3.1-10-gc9f91