summaryrefslogtreecommitdiffstats
path: root/library/cpp/yt/string/string.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'library/cpp/yt/string/string.cpp')
-rw-r--r--library/cpp/yt/string/string.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/library/cpp/yt/string/string.cpp b/library/cpp/yt/string/string.cpp
index d155da578e4..de9f41a5084 100644
--- a/library/cpp/yt/string/string.cpp
+++ b/library/cpp/yt/string/string.cpp
@@ -362,6 +362,31 @@ std::string TruncateString(std::string string, int lengthLimit, TStringBuf trunc
return string;
}
+TTruncatedStringView::TTruncatedStringView(const std::string& value, int limit)
+ : Value_(value)
+ , Limit_(limit)
+{ }
+
+void TTruncatedStringView::WriteToBuilder(TStringBuilderBase* builder, TStringBuf /* spec */) const
+{
+ int valueSize = std::ssize(Value_);
+ int maxSize = Limit_ + std::ssize(DefaultTruncatedMessage);
+ if (valueSize <= maxSize) {
+ builder->AppendString(Value_);
+ return;
+ }
+
+ char* begin = builder->Preallocate(maxSize);
+ memcpy(begin, Value_.data(), Limit_);
+ memcpy(begin + Limit_, DefaultTruncatedMessage.data(), DefaultTruncatedMessage.size());
+ builder->Advance(maxSize);
+}
+
+void FormatValue(TStringBuilderBase* builder, TTruncatedStringView value, TStringBuf spec)
+{
+ value.WriteToBuilder(builder, spec);
+}
+
////////////////////////////////////////////////////////////////////////////////
} // namespace NYT