summaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authorbabenko <[email protected]>2026-06-28 19:27:41 +0300
committerbabenko <[email protected]>2026-06-28 19:51:54 +0300
commitf3e7096029d090b57fc6c818f541c02834642cc4 (patch)
tree8673195741e83de9e32b682d4dad9b4470190abb /library/cpp
parent9e0fa46738a757b1e764f3d1bc51ef3cc6ed7f6d (diff)
YT-22593: Add AsciiStringToLower/AsciiStringToUpper
commit_hash:106e53bffa668818abf8e4003d694e1eb0a0316f
Diffstat (limited to 'library/cpp')
-rw-r--r--library/cpp/yt/string/string.cpp22
-rw-r--r--library/cpp/yt/string/string.h9
2 files changed, 30 insertions, 1 deletions
diff --git a/library/cpp/yt/string/string.cpp b/library/cpp/yt/string/string.cpp
index 1da50b4ccdd..e4a2afeca5e 100644
--- a/library/cpp/yt/string/string.cpp
+++ b/library/cpp/yt/string/string.cpp
@@ -65,6 +65,26 @@ TString CamelCaseToUnderscoreCase(TStringBuf str)
////////////////////////////////////////////////////////////////////////////////
+std::string AsciiStringToLower(TStringBuf value)
+{
+ std::string result(value.size(), '\0');
+ for (size_t index = 0; index < value.size(); ++index) {
+ result[index] = ::AsciiToLower(value[index]);
+ }
+ return result;
+}
+
+std::string AsciiStringToUpper(TStringBuf value)
+{
+ std::string result(value.size(), '\0');
+ for (size_t index = 0; index < value.size(); ++index) {
+ result[index] = ::AsciiToUpper(value[index]);
+ }
+ return result;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
[[nodiscard]] TStringBuf TrimLeadingWhitespaces(TStringBuf str Y_LIFETIME_BOUND)
{
auto begin = str.find_first_not_of(' ');
@@ -292,7 +312,7 @@ size_t TCaseInsensitiveStringHasher::operator()(TStringBuf arg) const
{
auto compute = [&] (char* buffer) {
for (size_t index = 0; index < arg.length(); ++index) {
- buffer[index] = AsciiToLower(arg[index]);
+ buffer[index] = ::AsciiToLower(arg[index]);
}
return ComputeHash(TStringBuf(buffer, arg.length()));
};
diff --git a/library/cpp/yt/string/string.h b/library/cpp/yt/string/string.h
index 346ec04ef4d..968ac3a0554 100644
--- a/library/cpp/yt/string/string.h
+++ b/library/cpp/yt/string/string.h
@@ -148,6 +148,15 @@ TString UnderscoreCaseToCamelCase(TStringBuf str);
void CamelCaseToUnderscoreCase(TStringBuilderBase* builder, TStringBuf str);
TString CamelCaseToUnderscoreCase(TStringBuf str);
+//! ASCII case conversion returning |std::string|.
+//! TODO(babenko): likely a temporary workaround; these exist only because util's
+//! |to_lower|/|to_upper| are |TString|-based (forcing a |TString| round-trip for
+//! |std::string| callers). Drop once util gains |std::string| support.
+//! Returns a copy of |value| with every ASCII letter lowercased; non-ASCII bytes are left intact.
+std::string AsciiStringToLower(TStringBuf value);
+//! Returns a copy of |value| with every ASCII letter uppercased; non-ASCII bytes are left intact.
+std::string AsciiStringToUpper(TStringBuf value);
+
[[nodiscard]] TStringBuf TrimLeadingWhitespaces(TStringBuf str Y_LIFETIME_BOUND);
[[nodiscard]] TStringBuf Trim(TStringBuf str Y_LIFETIME_BOUND, TStringBuf whitespaces = " ");