diff options
author | Alexander Smirnov <alex@ydb.tech> | 2024-01-31 17:22:33 +0300 |
---|---|---|
committer | Alexander Smirnov <alex@ydb.tech> | 2024-01-31 17:22:33 +0300 |
commit | 52be5dbdd420165c68e7e90ba8f1d2f00da041f6 (patch) | |
tree | 5d47f5b2ff4e6a7c8e75d33931a1e683949b7229 /util/stream/output.cpp | |
parent | ea57c8867ceca391357c3c5ffcc5ba6738b49adc (diff) | |
parent | 809f0cf2fdfddfbeacc2256ffdbaaf5808ce5ed4 (diff) | |
download | ydb-52be5dbdd420165c68e7e90ba8f1d2f00da041f6.tar.gz |
Merge branch 'mergelibs12' into main
Diffstat (limited to 'util/stream/output.cpp')
-rw-r--r-- | util/stream/output.cpp | 39 |
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()); } |