Skip to content

Commit e9ba0ba

Browse files
committed
template CharacterConverter size method
1 parent fdb8401 commit e9ba0ba

File tree

3 files changed

+7
-15
lines changed

3 files changed

+7
-15
lines changed

libc/src/__support/wchar/character_converter.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,6 @@ ErrorOr<char32_t> CharacterConverter::pop_utf32() {
132132
return utf32;
133133
}
134134

135-
size_t CharacterConverter::sizeAsUTF32() {
136-
return 1; // a single utf-32 value can fit an entire character
137-
}
138-
139-
size_t CharacterConverter::sizeAsUTF8() { return state->total_bytes; }
140-
141135
ErrorOr<char8_t> CharacterConverter::pop_utf8() {
142136
if (isEmpty())
143137
return Error(-1);

libc/src/__support/wchar/character_converter.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,12 @@ class CharacterConverter {
3232
bool isEmpty();
3333
bool isValidState();
3434

35-
size_t sizeAsUTF32();
36-
size_t sizeAsUTF8();
35+
template <typename CharType> size_t sizeAs() {
36+
if constexpr (cpp::is_same_v<CharType, char8_t>)
37+
return state->total_bytes;
38+
else // char32_t
39+
return 1; // every character fits in a single char32_t
40+
}
3741

3842
int push(char8_t utf8_byte);
3943
int push(char32_t utf32);

libc/src/__support/wchar/string_converter.h

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,7 @@ template <typename T> class StringConverter {
6363
if (!src_elements_read.has_value())
6464
return Error(src_elements_read.error());
6565

66-
size_t size;
67-
if constexpr (cpp::is_same_v<CharType, char8_t>)
68-
size = cr.sizeAsUTF8();
69-
else
70-
size = cr.sizeAsUTF32();
71-
72-
if (size > num_to_write) {
66+
if (cr.sizeAs<CharType>() > num_to_write) {
7367
cr.clear();
7468
return Error(-1);
7569
}

0 commit comments

Comments
 (0)