src: make ToLower/ToUpper input args more flexible

In particular, this enables passing `std::string_view` instead.

PR-URL: https://github.com/nodejs/node/pull/60052
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
This commit is contained in:
Anna Henningsen
2025-09-28 03:19:49 +02:00
parent f304bc2833
commit 76e18200d8
2 changed files with 20 additions and 10 deletions

View File

@@ -194,10 +194,14 @@ char ToLower(char c) {
return std::tolower(c, std::locale::classic());
}
std::string ToLower(const std::string& in) {
std::string out(in.size(), 0);
for (size_t i = 0; i < in.size(); ++i)
out[i] = ToLower(in[i]);
template <typename T>
std::string ToLower(const T& in) {
auto it = std::cbegin(in);
auto end = std::cend(in);
std::string out(std::distance(it, end), 0);
size_t i;
for (i = 0; it != end; ++it, ++i) out[i] = ToLower(*it);
DCHECK_EQ(i, out.size());
return out;
}
@@ -205,10 +209,14 @@ char ToUpper(char c) {
return std::toupper(c, std::locale::classic());
}
std::string ToUpper(const std::string& in) {
std::string out(in.size(), 0);
for (size_t i = 0; i < in.size(); ++i)
out[i] = ToUpper(in[i]);
template <typename T>
std::string ToUpper(const T& in) {
auto it = std::cbegin(in);
auto end = std::cend(in);
std::string out(std::distance(it, end), 0);
size_t i;
for (i = 0; it != end; ++it, ++i) out[i] = ToUpper(*it);
DCHECK_EQ(i, out.size());
return out;
}

View File

@@ -366,11 +366,13 @@ inline v8::Local<v8::String> FIXED_ONE_BYTE_STRING(v8::Isolate* isolate,
// tolower() is locale-sensitive. Use ToLower() instead.
inline char ToLower(char c);
inline std::string ToLower(const std::string& in);
template <typename T>
inline std::string ToLower(const T& in);
// toupper() is locale-sensitive. Use ToUpper() instead.
inline char ToUpper(char c);
inline std::string ToUpper(const std::string& in);
template <typename T>
inline std::string ToUpper(const T& in);
// strcasecmp() is locale-sensitive. Use StringEqualNoCase() instead.
inline bool StringEqualNoCase(const char* a, const char* b);