AK: Add ASCII fast path in StringBuilder::append(Utf16View)

And let's at least try to pre-allocate an appropriate amount of
buffer space in the builder instead of appending and growing one
code point at a time.
This commit is contained in:
Andreas Kling 2024-10-25 13:38:55 +02:00 committed by Andreas Kling
parent d16414b61e
commit b6e28ff807
Notes: github-actions[bot] 2024-10-25 13:11:04 +00:00

View file

@ -224,7 +224,19 @@ void StringBuilder::append_code_point(u32 code_point)
ErrorOr<void> StringBuilder::try_append(Utf16View const& utf16_view)
{
// NOTE: This may under-allocate in the presence of surrogate pairs.
// That's okay, appending will still grow the buffer as needed.
TRY(will_append(utf16_view.length_in_code_units()));
for (size_t i = 0; i < utf16_view.length_in_code_units();) {
// OPTIMIZATION: Fast path for ASCII characters.
auto code_unit = utf16_view.data()[i];
if (code_unit <= 0x7f) {
append(static_cast<char>(code_unit));
++i;
continue;
}
auto code_point = utf16_view.code_point_at(i);
TRY(try_append_code_point(code_point));