From ecef36edcab5219ce1a759eb0d2d24e061b4e886 Mon Sep 17 00:00:00 2001 From: Attila Molnar Date: Mon, 22 Aug 2016 16:49:18 +0200 Subject: [PATCH] Create irc::equals() from StrHashComp Make StrHashComp a wrapper around it --- include/hashcomp.h | 16 ++++++++++++++-- src/hashcomp.cpp | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/include/hashcomp.h b/include/hashcomp.h index 168ecb289..aa204ace6 100644 --- a/include/hashcomp.h +++ b/include/hashcomp.h @@ -98,15 +98,27 @@ template const T& SearchAndReplace(T& text, const T& pattern, const namespace irc { + /** Check if two IRC object (e.g. nick or channel) names are equal. + * This function uses national_case_insensitive_map to determine equality, which, by default does comparison + * according to RFC 1459, treating certain otherwise non-identical characters as identical. + * @param s1 First string to compare + * @param s2 Second string to compare + * @return True if the two names are equal, false otherwise + */ + CoreExport bool equals(const std::string& s1, const std::string& s2); + /** This class returns true if two strings match. * Case sensitivity is ignored, and the RFC 'character set' * is adhered to */ - struct CoreExport StrHashComp + struct StrHashComp { /** The operator () does the actual comparison in hash_map */ - bool operator()(const std::string& s1, const std::string& s2) const; + bool operator()(const std::string& s1, const std::string& s2) const + { + return equals(s1, s2); + } }; struct insensitive diff --git a/src/hashcomp.cpp b/src/hashcomp.cpp index 1bbc35d1f..2c7dca5b1 100644 --- a/src/hashcomp.cpp +++ b/src/hashcomp.cpp @@ -151,7 +151,7 @@ unsigned const char rfc_case_sensitive_map[256] = { 250, 251, 252, 253, 254, 255, // 250-255 }; -bool irc::StrHashComp::operator()(const std::string& s1, const std::string& s2) const +bool irc::equals(const std::string& s1, const std::string& s2) { const unsigned char* n1 = (const unsigned char*)s1.c_str(); const unsigned char* n2 = (const unsigned char*)s2.c_str(); -- 2.39.2