// Slow version, used if caller hasn't stored an upper and lower case version bool operator()(StringData v1, StringData v2, bool = false, bool = false) const { if (v2.is_null() && !v1.is_null()) return false; if (v1.size() > v2.size()) return false; std::string v1_upper = case_map(v1, true); std::string v1_lower = case_map(v1, false); return equal_case_fold(v2.prefix(v1.size()), v1_upper.c_str(), v1_lower.c_str()); }
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false, bool = false) const { if (v2.is_null() && !v1.is_null()) return false; return v1.size() <= v2.size() && equal_case_fold(v2.prefix(v1.size()), v1_upper, v1_lower); }