[libc-commits] [libc] [libc] Template StringConverter pop function to avoid duplicate code (PR #152204)

Michael Jones via libc-commits libc-commits at lists.llvm.org
Tue Aug 5 14:34:25 PDT 2025


================
@@ -64,42 +63,23 @@ template <typename T> class StringConverter {
       if (!src_elements_read.has_value())
         return Error(src_elements_read.error());
 
-      if (cr.sizeAsUTF32() > num_to_write) {
-        cr.clear();
-        return Error(-1);
-      }
-
-      src_idx += src_elements_read.value();
-    }
-
-    auto out = cr.pop_utf32();
-    if (out.has_value() && out.value() == L'\0')
-      src_len = src_idx;
-
-    num_to_write--;
-
-    return out;
-  }
-
-  ErrorOr<char8_t> popUTF8() {
-    if (num_to_write == 0)
-      return Error(-1);
-
-    if (cr.isEmpty() || src_idx == 0) {
-      auto src_elements_read = pushFullCharacter();
-      if (!src_elements_read.has_value())
-        return Error(src_elements_read.error());
+      size_t size;
+      if constexpr (cpp::is_same_v<CharType, char8_t>)
+        size = cr.sizeAsUTF8();
+      else
+        size = cr.sizeAsUTF32();
----------------
michaelrj-google wrote:

would it make sense to also template `sizeAs`?

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


More information about the libc-commits mailing list