aboutsummaryrefslogtreecommitdiffstats
path: root/util/stream/output.cpp
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2024-01-31 17:22:33 +0300
committerAlexander Smirnov <alex@ydb.tech>2024-01-31 17:22:33 +0300
commit52be5dbdd420165c68e7e90ba8f1d2f00da041f6 (patch)
tree5d47f5b2ff4e6a7c8e75d33931a1e683949b7229 /util/stream/output.cpp
parentea57c8867ceca391357c3c5ffcc5ba6738b49adc (diff)
parent809f0cf2fdfddfbeacc2256ffdbaaf5808ce5ed4 (diff)
downloadydb-52be5dbdd420165c68e7e90ba8f1d2f00da041f6.tar.gz
Merge branch 'mergelibs12' into main
Diffstat (limited to 'util/stream/output.cpp')
-rw-r--r--util/stream/output.cpp39
1 files changed, 24 insertions, 15 deletions
diff --git a/util/stream/output.cpp b/util/stream/output.cpp
index 719c877764..8b3f78527d 100644
--- a/util/stream/output.cpp
+++ b/util/stream/output.cpp
@@ -70,24 +70,13 @@ void Out<wchar32>(IOutputStream& o, wchar32 ch) {
o.Write(buffer, length);
}
-static void WriteString(IOutputStream& o, const wchar16* w, size_t n) {
+template <typename TCharType>
+static void WriteString(IOutputStream& o, const TCharType* w, size_t n) {
const size_t buflen = (n * MAX_UTF8_BYTES); // * 4 because the conversion functions can convert unicode character into maximum 4 bytes of UTF8
TTempBuf buffer(buflen + 1);
- char* const data = buffer.Data();
size_t written = 0;
- WideToUTF8(w, n, data, written);
- data[written] = 0;
- o.Write(data, written);
-}
-
-static void WriteString(IOutputStream& o, const wchar32* w, size_t n) {
- const size_t buflen = (n * MAX_UTF8_BYTES); // * 4 because the conversion functions can convert unicode character into maximum 4 bytes of UTF8
- TTempBuf buffer(buflen + 1);
- char* const data = buffer.Data();
- size_t written = 0;
- WideToUTF8(w, n, data, written);
- data[written] = 0;
- o.Write(data, written);
+ WideToUTF8(w, n, buffer.Data(), written);
+ o.Write(buffer.Data(), written);
}
template <>
@@ -101,11 +90,31 @@ void Out<std::string>(IOutputStream& o, const std::string& p) {
}
template <>
+void Out<std::wstring>(IOutputStream& o, const std::wstring& p) {
+ WriteString(o, p.data(), p.length());
+}
+
+template <>
+void Out<std::u16string>(IOutputStream& o, const std::u16string& p) {
+ WriteString(o, p.data(), p.length());
+}
+
+template <>
+void Out<std::u32string>(IOutputStream& o, const std::u32string& p) {
+ WriteString(o, p.data(), p.length());
+}
+
+template <>
void Out<std::string_view>(IOutputStream& o, const std::string_view& p) {
o.Write(p.data(), p.length());
}
template <>
+void Out<std::wstring_view>(IOutputStream& o, const std::wstring_view& p) {
+ WriteString(o, p.data(), p.length());
+}
+
+template <>
void Out<std::u16string_view>(IOutputStream& o, const std::u16string_view& p) {
WriteString(o, p.data(), p.length());
}