X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fhashcomp.cpp;h=a2b1eab0bbea81254959cd44faa0d893d0266ca9;hb=ee465c20b6841bce724fa5e1402b1c9ee60b788e;hp=ed68cd9418c03c278824eabb8eb67711e2214209;hpb=703ca18c66d6e7b209b13f415dfc52624801c77a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/hashcomp.cpp b/src/hashcomp.cpp index ed68cd941..a2b1eab0b 100644 --- a/src/hashcomp.cpp +++ b/src/hashcomp.cpp @@ -2,11 +2,11 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see - * the file COPYING for details. + * the file COPYING for details. * * --------------------------------------------------- */ @@ -56,7 +56,7 @@ void nspace::strlower(char *n) if (n) { for (char* t = n; *t; t++) - *t = rfc_case_insensitive_map[(unsigned char)*t]; + *t = national_case_insensitive_map[(unsigned char)*t]; } } @@ -73,12 +73,12 @@ void nspace::strlower(char *n) /* XXX: NO DATA COPIES! :) * The hash function here is practically * a copy of the one in STL's hash_fun.h, - * only with *x replaced with rfc_case_insensitive_map[*x]. + * only with *x replaced with national_case_insensitive_map[*x]. * This avoids a copy to use hash */ register size_t t = 0; for (std::string::const_iterator x = s.begin(); x != s.end(); ++x) /* ++x not x++, as its faster */ - t = 5 * t + rfc_case_insensitive_map[(unsigned char)*x]; + t = 5 * t + national_case_insensitive_map[(unsigned char)*x]; return t; } @@ -91,7 +91,7 @@ size_t nspace::hash_compare >::operator()(co { register size_t t = 0; for (irc::string::const_iterator x = s.begin(); x != s.end(); ++x) /* ++x not x++, as its faster */ - t = 5 * t + rfc_case_insensitive_map[(unsigned char)*x]; + t = 5 * t + national_case_insensitive_map[(unsigned char)*x]; return t; } @@ -100,9 +100,9 @@ bool irc::StrHashComp::operator()(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(); for (; *n1 && *n2; n1++, n2++) - if (rfc_case_insensitive_map[*n1] != rfc_case_insensitive_map[*n2]) + if (national_case_insensitive_map[*n1] != national_case_insensitive_map[*n2]) return false; - return (rfc_case_insensitive_map[*n1] == rfc_case_insensitive_map[*n2]); + return (national_case_insensitive_map[*n1] == national_case_insensitive_map[*n2]); } /****************************************************** @@ -112,33 +112,33 @@ bool irc::StrHashComp::operator()(const std::string& s1, const std::string& s2) * std::string which is not only case-insensitive but * can also do scandanavian comparisons, e.g. { = [, etc. * - * This class depends on the const array 'rfc_case_insensitive_map'. + * This class depends on the const array 'national_case_insensitive_map'. * ******************************************************/ bool irc::irc_char_traits::eq(char c1st, char c2nd) { - return rfc_case_insensitive_map[(unsigned char)c1st] == rfc_case_insensitive_map[(unsigned char)c2nd]; + return national_case_insensitive_map[(unsigned char)c1st] == national_case_insensitive_map[(unsigned char)c2nd]; } bool irc::irc_char_traits::ne(char c1st, char c2nd) { - return rfc_case_insensitive_map[(unsigned char)c1st] != rfc_case_insensitive_map[(unsigned char)c2nd]; + return national_case_insensitive_map[(unsigned char)c1st] != national_case_insensitive_map[(unsigned char)c2nd]; } bool irc::irc_char_traits::lt(char c1st, char c2nd) { - return rfc_case_insensitive_map[(unsigned char)c1st] < rfc_case_insensitive_map[(unsigned char)c2nd]; + return national_case_insensitive_map[(unsigned char)c1st] < national_case_insensitive_map[(unsigned char)c2nd]; } int irc::irc_char_traits::compare(const char* str1, const char* str2, size_t n) { for(unsigned int i = 0; i < n; i++) { - if(rfc_case_insensitive_map[(unsigned char)*str1] > rfc_case_insensitive_map[(unsigned char)*str2]) + if(national_case_insensitive_map[(unsigned char)*str1] > national_case_insensitive_map[(unsigned char)*str2]) return 1; - if(rfc_case_insensitive_map[(unsigned char)*str1] < rfc_case_insensitive_map[(unsigned char)*str2]) + if(national_case_insensitive_map[(unsigned char)*str1] < national_case_insensitive_map[(unsigned char)*str2]) return -1; if(*str1 == 0 || *str2 == 0) @@ -152,9 +152,9 @@ int irc::irc_char_traits::compare(const char* str1, const char* str2, size_t n) const char* irc::irc_char_traits::find(const char* s1, int n, char c) { - while(n-- > 0 && rfc_case_insensitive_map[(unsigned char)*s1] != rfc_case_insensitive_map[(unsigned char)c]) + while(n-- > 0 && national_case_insensitive_map[(unsigned char)*s1] != national_case_insensitive_map[(unsigned char)c]) s1++; - return s1; + return (n >= 0) ? s1 : NULL; } irc::tokenstream::tokenstream(const std::string &source) : tokens(source), last_pushed(false) @@ -290,7 +290,7 @@ std::string irc::hex(const unsigned char *raw, size_t rawsz) return ""; /* EWW! This used to be using sprintf, which is WAY inefficient. -Special */ - + const char *hex = "0123456789abcdef"; static char hexbuf[MAXBUF]; @@ -455,7 +455,7 @@ long irc::portparser::GetToken() { while (((Overlaps(in_range)) && (in_range <= range_end))) in_range++; - + if (in_range <= range_end) return in_range; } @@ -501,3 +501,24 @@ long irc::portparser::GetToken() } } +/*const std::basic_string& SearchAndReplace(std::string& text, const std::string& pattern, const std::string& replace) +{ + std::string replacement; + if ((!pattern.empty()) && (!text.empty())) + { + for (std::string::size_type n = 0; n != text.length(); ++n) + { + if (text.length() >= pattern.length() && text.substr(n, pattern.length()) == pattern) + { + replacement.append(replace); + n = n + pattern.length() - 1; + } + else + { + replacement += text[n]; + } + } + } + text = replacement; + return text; +}*/