Skip to content
24 changes: 24 additions & 0 deletions libc/src/__support/wchar/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
)
1 change: 1 addition & 0 deletions libc/src/__support/wchar/character_converter.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

20 changes: 20 additions & 0 deletions libc/src/__support/wchar/character_converter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@

#include "hdr/types/wchar_t.h"
#include "src/__support/wchar/mbstate.h"
#include "src/__support/wchar/utf_ret.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();
};
8 changes: 8 additions & 0 deletions libc/src/__support/wchar/mbstate.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

#include "hdr/types/wchar_t.h"

struct mbstate_t {
wchar_t partial;
unsigned char bits_processed;
unsigned char total_bytes;
};
5 changes: 5 additions & 0 deletions libc/src/__support/wchar/utf_ret.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@

template <typename T> struct utf_ret {
T out;
int error;
};
Loading