@@ -10,7 +10,6 @@ const assert = std.debug.assert;
1010const Allocator = std .mem .Allocator ;
1111const Benchmark = @import ("Benchmark.zig" );
1212const options = @import ("options.zig" );
13- const uucode = @import ("uucode" );
1413const UTF8Decoder = @import ("../terminal/UTF8Decoder.zig" );
1514const simd = @import ("../simd/main.zig" );
1615const table = @import ("../unicode/main.zig" ).table ;
@@ -48,9 +47,6 @@ pub const Mode = enum {
4847
4948 /// Test our lookup table implementation.
5049 table ,
51-
52- /// Using uucode, with custom `width` extension based on `wcwidth`.
53- uucode ,
5450};
5551
5652/// Create a new terminal stream handler for the given arguments.
@@ -75,7 +71,6 @@ pub fn benchmark(self: *CodepointWidth) Benchmark {
7571 .wcwidth = > stepWcwidth ,
7672 .table = > stepTable ,
7773 .simd = > stepSimd ,
78- .uucode = > stepUucode ,
7974 },
8075 .setupFn = setup ,
8176 .teardownFn = teardown ,
@@ -112,12 +107,15 @@ fn stepWcwidth(ptr: *anyopaque) Benchmark.Error!void {
112107 const self : * CodepointWidth = @ptrCast (@alignCast (ptr ));
113108
114109 const f = self .data_f orelse return ;
115- var r = std .io .bufferedReader (f .reader ());
110+ var read_buf : [4096 ]u8 = undefined ;
111+ var f_reader = f .reader (& read_buf );
112+ var r = & f_reader .interface ;
113+
116114 var d : UTF8Decoder = .{};
117115 var buf : [4096 ]u8 align (std .atomic .cache_line ) = undefined ;
118116 while (true ) {
119- const n = r .read (& buf ) catch | err | {
120- log .warn ("error reading data file err={}" , .{err });
117+ const n = r .readSliceShort (& buf ) catch {
118+ log .warn ("error reading data file err={? }" , .{f_reader . err });
121119 return error .BenchmarkFailed ;
122120 };
123121 if (n == 0 ) break ; // EOF reached
@@ -136,12 +134,15 @@ fn stepTable(ptr: *anyopaque) Benchmark.Error!void {
136134 const self : * CodepointWidth = @ptrCast (@alignCast (ptr ));
137135
138136 const f = self .data_f orelse return ;
139- var r = std .io .bufferedReader (f .reader ());
137+ var read_buf : [4096 ]u8 = undefined ;
138+ var f_reader = f .reader (& read_buf );
139+ var r = & f_reader .interface ;
140+
140141 var d : UTF8Decoder = .{};
141142 var buf : [4096 ]u8 align (std .atomic .cache_line ) = undefined ;
142143 while (true ) {
143- const n = r .read (& buf ) catch | err | {
144- log .warn ("error reading data file err={}" , .{err });
144+ const n = r .readSliceShort (& buf ) catch {
145+ log .warn ("error reading data file err={? }" , .{f_reader . err });
145146 return error .BenchmarkFailed ;
146147 };
147148 if (n == 0 ) break ; // EOF reached
@@ -165,36 +166,15 @@ fn stepSimd(ptr: *anyopaque) Benchmark.Error!void {
165166 const self : * CodepointWidth = @ptrCast (@alignCast (ptr ));
166167
167168 const f = self .data_f orelse return ;
168- var r = std .io .bufferedReader (f .reader ());
169- var d : UTF8Decoder = .{};
170- var buf : [4096 ]u8 align (std .atomic .cache_line ) = undefined ;
171- while (true ) {
172- const n = r .read (& buf ) catch | err | {
173- log .warn ("error reading data file err={}" , .{err });
174- return error .BenchmarkFailed ;
175- };
176- if (n == 0 ) break ; // EOF reached
177-
178- for (buf [0.. n ]) | c | {
179- const cp_ , const consumed = d .next (c );
180- assert (consumed );
181- if (cp_ ) | cp | {
182- std .mem .doNotOptimizeAway (simd .codepointWidth (cp ));
183- }
184- }
185- }
186- }
187-
188- fn stepUucode (ptr : * anyopaque ) Benchmark.Error ! void {
189- const self : * CodepointWidth = @ptrCast (@alignCast (ptr ));
169+ var read_buf : [4096 ]u8 = undefined ;
170+ var f_reader = f .reader (& read_buf );
171+ var r = & f_reader .interface ;
190172
191- const f = self .data_f orelse return ;
192- var r = std .io .bufferedReader (f .reader ());
193173 var d : UTF8Decoder = .{};
194174 var buf : [4096 ]u8 align (std .atomic .cache_line ) = undefined ;
195175 while (true ) {
196- const n = r .read (& buf ) catch | err | {
197- log .warn ("error reading data file err={}" , .{err });
176+ const n = r .readSliceShort (& buf ) catch {
177+ log .warn ("error reading data file err={? }" , .{f_reader . err });
198178 return error .BenchmarkFailed ;
199179 };
200180 if (n == 0 ) break ; // EOF reached
@@ -203,12 +183,7 @@ fn stepUucode(ptr: *anyopaque) Benchmark.Error!void {
203183 const cp_ , const consumed = d .next (c );
204184 assert (consumed );
205185 if (cp_ ) | cp | {
206- // This is the same trick we do in terminal.zig so we
207- // keep it here.
208- std .mem .doNotOptimizeAway (if (cp <= 0xFF )
209- 1
210- else
211- uucode .get (.width , @intCast (cp )));
186+ std .mem .doNotOptimizeAway (simd .codepointWidth (cp ));
212187 }
213188 }
214189 }
0 commit comments