[libcxx] [llvm] [libcxx] Speed up xsgetn for always_noconv (PR #212010)

via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 11 02:07:36 PDT 2026


================
@@ -199,6 +200,28 @@ typename __stdinbuf<_CharT>::int_type __stdinbuf<_CharT>::__getchar(bool __consu
   return traits_type::to_int_type(__1buf);
 }
 
+template <class _CharT>
+streamsize __stdinbuf<_CharT>::xsgetn(char_type* __s, streamsize __n) {
+  if constexpr (is_same<_CharT, char>::value) {
+    if (__always_noconv_) {
+      streamsize __i = 0;
+      if (__i < __n && __last_consumed_is_next_) {
+        __s[__i++]               = traits_type::to_char_type(__last_consumed_);
----------------
aokblast wrote:

I am not sure if I follows what you said. But __s is a output buffer and even the original implementation (e.g. basic_streambuf<char_type, traits_type>::xsgetn(__s, __n)) modify this buffer.

https://github.com/llvm/llvm-project/pull/212010


More information about the llvm-commits mailing list