diff options
| author | 2024-02-17 13:31:45 -0400 | |
|---|---|---|
| committer | 2024-02-17 13:31:45 -0400 | |
| commit | ae5d7a0c310c7b0acd7a51e97ee46893f3d5b79e (patch) | |
| tree | 2c777053752e347b7b0f27127a17bdda97795e8d /src | |
| parent | display_width tweaks (diff) | |
| download | zg-ae5d7a0c310c7b0acd7a51e97ee46893f3d5b79e.tar.gz zg-ae5d7a0c310c7b0acd7a51e97ee46893f3d5b79e.tar.xz zg-ae5d7a0c310c7b0acd7a51e97ee46893f3d5b79e.zip | |
Fixed isAsciiOnly and CodePointIterator ASCII bugs
Diffstat (limited to 'src')
| -rw-r--r-- | src/CodePoint.zig | 6 | ||||
| -rw-r--r-- | src/display_width.zig | 9 | ||||
| -rw-r--r-- | src/main.zig | 6 |
3 files changed, 11 insertions, 10 deletions
diff --git a/src/CodePoint.zig b/src/CodePoint.zig index 1c1bec1..62dd793 100644 --- a/src/CodePoint.zig +++ b/src/CodePoint.zig | |||
| @@ -18,11 +18,11 @@ pub const CodePointIterator = struct { | |||
| 18 | 18 | ||
| 19 | if (self.bytes[self.i] < 128) { | 19 | if (self.bytes[self.i] < 128) { |
| 20 | // ASCII fast path | 20 | // ASCII fast path |
| 21 | defer self.i += 1; | 21 | self.i += 1; |
| 22 | return .{ | 22 | return .{ |
| 23 | .code = self.bytes[self.i], | 23 | .code = self.bytes[self.i - 1], |
| 24 | .len = 1, | 24 | .len = 1, |
| 25 | .offset = self.i, | 25 | .offset = self.i - 1, |
| 26 | }; | 26 | }; |
| 27 | } | 27 | } |
| 28 | 28 | ||
diff --git a/src/display_width.zig b/src/display_width.zig index 2ac7093..ba76052 100644 --- a/src/display_width.zig +++ b/src/display_width.zig | |||
| @@ -22,16 +22,17 @@ fn isAsciiOnly(str: []const u8) bool { | |||
| 22 | } else true; | 22 | } else true; |
| 23 | 23 | ||
| 24 | const Vec = @Vector(vec_len, u8); | 24 | const Vec = @Vector(vec_len, u8); |
| 25 | var i: usize = 0; | 25 | var remaining = str; |
| 26 | 26 | ||
| 27 | while (i < str.len) : (i += vec_len) { | 27 | while (true) { |
| 28 | if (str[i..].len < vec_len) return for (str[i..]) |b| { | 28 | if (remaining.len < vec_len) return for (remaining) |b| { |
| 29 | if (b > 127) break false; | 29 | if (b > 127) break false; |
| 30 | } else true; | 30 | } else true; |
| 31 | 31 | ||
| 32 | const v1 = str[0..vec_len].*; | 32 | const v1 = remaining[0..vec_len].*; |
| 33 | const v2: Vec = @splat(127); | 33 | const v2: Vec = @splat(127); |
| 34 | if (@reduce(.Or, v1 > v2)) return false; | 34 | if (@reduce(.Or, v1 > v2)) return false; |
| 35 | remaining = remaining[vec_len..]; | ||
| 35 | } | 36 | } |
| 36 | 37 | ||
| 37 | return true; | 38 | return true; |
diff --git a/src/main.zig b/src/main.zig index 38ba343..7ff07ee 100644 --- a/src/main.zig +++ b/src/main.zig | |||
| @@ -6,7 +6,7 @@ const std = @import("std"); | |||
| 6 | // const codePointWidth = @import("display_width").codePointWidth; | 6 | // const codePointWidth = @import("display_width").codePointWidth; |
| 7 | // const strWidth = @import("ziglyph").display_width.strWidth; | 7 | // const strWidth = @import("ziglyph").display_width.strWidth; |
| 8 | const strWidth = @import("display_width").strWidth; | 8 | const strWidth = @import("display_width").strWidth; |
| 9 | const CodePointIterator = @import("CodePoint").CodePointIterator; | 9 | // const CodePointIterator = @import("CodePoint").CodePointIterator; |
| 10 | 10 | ||
| 11 | pub fn main() !void { | 11 | pub fn main() !void { |
| 12 | var gpa = std.heap.GeneralPurposeAllocator(.{}){}; | 12 | var gpa = std.heap.GeneralPurposeAllocator(.{}){}; |
| @@ -16,12 +16,12 @@ pub fn main() !void { | |||
| 16 | const input = try std.fs.cwd().readFileAlloc(allocator, "lang_mix.txt", std.math.maxInt(u32)); | 16 | const input = try std.fs.cwd().readFileAlloc(allocator, "lang_mix.txt", std.math.maxInt(u32)); |
| 17 | defer allocator.free(input); | 17 | defer allocator.free(input); |
| 18 | 18 | ||
| 19 | var result: usize = 0; | ||
| 20 | // var result: isize = 0; | ||
| 21 | // var iter = GraphemeIterator.init(input); | 19 | // var iter = GraphemeIterator.init(input); |
| 22 | // var iter = CodePointIterator{ .bytes = input }; | 20 | // var iter = CodePointIterator{ .bytes = input }; |
| 23 | var iter = std.mem.splitScalar(u8, input, '\n'); | 21 | var iter = std.mem.splitScalar(u8, input, '\n'); |
| 24 | 22 | ||
| 23 | var result: usize = 0; | ||
| 24 | // var result: isize = 0; | ||
| 25 | var timer = try std.time.Timer.start(); | 25 | var timer = try std.time.Timer.start(); |
| 26 | 26 | ||
| 27 | // for (0..50) |_| { | 27 | // for (0..50) |_| { |