summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CodePoint.zig6
-rw-r--r--src/display_width.zig9
-rw-r--r--src/main.zig6
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;
8const strWidth = @import("display_width").strWidth; 8const strWidth = @import("display_width").strWidth;
9const CodePointIterator = @import("CodePoint").CodePointIterator; 9// const CodePointIterator = @import("CodePoint").CodePointIterator;
10 10
11pub fn main() !void { 11pub 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) |_| {