aboutsummaryrefslogtreecommitdiff
path: root/src/string_immutable.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/string_immutable.zig')
-rw-r--r--src/string_immutable.zig37
1 files changed, 16 insertions, 21 deletions
diff --git a/src/string_immutable.zig b/src/string_immutable.zig
index 94e0b7730..9a0165020 100644
--- a/src/string_immutable.zig
+++ b/src/string_immutable.zig
@@ -942,16 +942,13 @@ pub fn toUTF16Alloc(allocator: std.mem.Allocator, bytes: []const u8, comptime fa
var remaining = chunk;
{
- var sequence: [4]u8 = undefined;
-
- if (remaining.len >= 4) {
- sequence = remaining[0..4].*;
- } else {
- sequence[0] = remaining[0];
- sequence[1] = if (remaining.len > 1) remaining[1] else 0;
- sequence[2] = if (remaining.len > 2) remaining[2] else 0;
- sequence[3] = 0;
- }
+ const sequence: [4]u8 = switch (remaining.len) {
+ 0 => unreachable,
+ 1 => [_]u8{ remaining[0], 0, 0, 0 },
+ 2 => [_]u8{ remaining[0], remaining[1], 0, 0 },
+ 3 => [_]u8{ remaining[0], remaining[1], remaining[2], 0 },
+ else => remaining[0..4].*,
+ };
const replacement = strings.convertUTF8BytesIntoUTF16(&sequence);
if (comptime fail_if_invalid) {
@@ -980,16 +977,13 @@ pub fn toUTF16Alloc(allocator: std.mem.Allocator, bytes: []const u8, comptime fa
const last = remaining[0..j];
remaining = remaining[j..];
- var sequence: [4]u8 = undefined;
-
- if (remaining.len >= 4) {
- sequence = remaining[0..4].*;
- } else {
- sequence[0] = remaining[0];
- sequence[1] = if (remaining.len > 1) remaining[1] else 0;
- sequence[2] = if (remaining.len > 2) remaining[2] else 0;
- sequence[3] = 0;
- }
+ const sequence: [4]u8 = switch (remaining.len) {
+ 0 => unreachable,
+ 1 => [_]u8{ remaining[0], 0, 0, 0 },
+ 2 => [_]u8{ remaining[0], remaining[1], 0, 0 },
+ 3 => [_]u8{ remaining[0], remaining[1], remaining[2], 0 },
+ else => remaining[0..4].*,
+ };
const replacement = strings.convertUTF8BytesIntoUTF16(&sequence);
if (comptime fail_if_invalid) {
@@ -1016,7 +1010,8 @@ pub fn toUTF16Alloc(allocator: std.mem.Allocator, bytes: []const u8, comptime fa
}
if (remaining.len > 0) {
- try output.ensureUnusedCapacity(remaining.len);
+ try output.ensureTotalCapacityPrecise(output.items.len + remaining.len);
+
output.items.len += remaining.len;
strings.copyU8IntoU16(output.items[output.items.len - remaining.len ..], remaining);
}