[libc-commits] [libc] [libc] Character converter skeleton class (PR #143619)

Uzair Nawaz via libc-commits libc-commits at lists.llvm.org
Tue Jun 10 15:38:51 PDT 2025


https://github.com/uzairnawaz created https://github.com/llvm/llvm-project/pull/143619

Made CharacterConverter class skeleton


>From 4de427f6c44acad9299922ec2844174ee14ddb37 Mon Sep 17 00:00:00 2001
From: Uzair Nawaz <uzairnawaz at google.com>
Date: Tue, 10 Jun 2025 22:36:36 +0000
Subject: [PATCH] character converter skeleton class

---
 libc/src/__support/wchar/CMakeLists.txt       | 24 +++++++++++++++++++
 .../__support/wchar/character_converter.cpp   |  2 ++
 .../src/__support/wchar/character_converter.h | 20 ++++++++++++++++
 libc/src/__support/wchar/mbstate.h            |  8 +++++++
 libc/src/__support/wchar/utf_ret.h            |  6 +++++
 5 files changed, 60 insertions(+)
 create mode 100644 libc/src/__support/wchar/CMakeLists.txt
 create mode 100644 libc/src/__support/wchar/character_converter.cpp
 create mode 100644 libc/src/__support/wchar/character_converter.h
 create mode 100644 libc/src/__support/wchar/mbstate.h
 create mode 100644 libc/src/__support/wchar/utf_ret.h

diff --git a/libc/src/__support/wchar/CMakeLists.txt b/libc/src/__support/wchar/CMakeLists.txt
new file mode 100644
index 0000000000000..c1f402767235f
--- /dev/null
+++ b/libc/src/__support/wchar/CMakeLists.txt
@@ -0,0 +1,24 @@
+add_header_library(
+  mbstate
+  HDRS
+    mbstate.h
+  DEPENDS
+    libc.hdr.types.wchar_t    
+)
+
+add_header_library(
+  character_converter
+  HDRS
+    character_converter.h
+  DEPENDS
+    libc.hdr.types.wchar_t
+    .mbstate
+    .utf_ret
+)
+
+add_header_library(
+  utf_ret
+  HDRS
+    utf_ret.h
+  DEPENDS
+)
diff --git a/libc/src/__support/wchar/character_converter.cpp b/libc/src/__support/wchar/character_converter.cpp
new file mode 100644
index 0000000000000..139597f9cb07c
--- /dev/null
+++ b/libc/src/__support/wchar/character_converter.cpp
@@ -0,0 +1,2 @@
+
+
diff --git a/libc/src/__support/wchar/character_converter.h b/libc/src/__support/wchar/character_converter.h
new file mode 100644
index 0000000000000..1800fe16eb14b
--- /dev/null
+++ b/libc/src/__support/wchar/character_converter.h
@@ -0,0 +1,20 @@
+
+#include "src/__support/wchar/mbstate.h"
+#include "src/__support/wchar/utf_ret.h"
+#include "hdr/types/wchar_t.h"
+
+class CharacterConverter {
+private:
+    mbstate_t* state;
+
+public:
+    CharacterConverter();
+
+    bool isComplete();
+
+    int push(char utf8_byte);
+    int push(wchar_t utf32);
+
+    utf_ret<char> pop_utf8();
+    utf_ret<wchar_t> pop_utf32();
+};
diff --git a/libc/src/__support/wchar/mbstate.h b/libc/src/__support/wchar/mbstate.h
new file mode 100644
index 0000000000000..c0af608c37623
--- /dev/null
+++ b/libc/src/__support/wchar/mbstate.h
@@ -0,0 +1,8 @@
+
+#include "hdr/types/wchar_t.h"
+
+struct mbstate_t {
+    wchar_t partial;
+    unsigned char bits_processed;
+    unsigned char total_bytes;
+};
diff --git a/libc/src/__support/wchar/utf_ret.h b/libc/src/__support/wchar/utf_ret.h
new file mode 100644
index 0000000000000..533f4cb952f4b
--- /dev/null
+++ b/libc/src/__support/wchar/utf_ret.h
@@ -0,0 +1,6 @@
+
+template <typename T>
+struct utf_ret {
+    T out;
+    int error;
+};



More information about the libc-commits mailing list