}
// Case-insensitive header comparison and hashing.
-struct HTTPLess {
+struct HTTPEqual {
bool operator() (const std::string &a, const std::string &b) const
{
- return std::lexicographical_compare(
- begin(a), end(a), begin(b), end(b),
- [](char a, char b) {
- return ascii_tolower(a) < ascii_tolower(b);
- });
+ return a.size() == b.size() &&
+ std::equal(
+ begin(a), end(a), begin(b),
+ [](char a, char b) {
+ return ascii_tolower(a) == ascii_tolower(b);
+ });
}
};
struct HTTPHash {
return std::hash<std::string>() (s_low);
}
};
-using HTTPHeaderMultimap = std::unordered_multimap<std::string, std::string, HTTPHash, HTTPLess>;
+using HTTPHeaderMultimap = std::unordered_multimap<std::string, std::string, HTTPHash, HTTPEqual>;
// Split a line on whitespace, e.g. "foo bar baz" -> {"foo", "bar", "baz"}.
std::vector<std::string> split_tokens(const std::string &line);