authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-08-26 16:56:38-07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-08-26 16:56:38-07:00
log59f69a16595bde12e4b51e03bc98a7657866ee44
treef944ba5ac4c7a218cf5cd127b98d7b03562059a3
parent0b8ecc8d7a29012845ad62e13be3d0db294fb3b4
signature Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

unicode_data: hide 'data' decl and switch to SoA access


2 files changed, 19 insertions(+), 5 deletions(-)

src/unicode_data.zig+18-4
...@@ -9,7 +9,21 @@ const ucd = @import("./lib.zig");...@@ -9,7 +9,21 @@ const ucd = @import("./lib.zig");
9const std = @import("std");9const std = @import("std");
10const extras = @import("extras");10const extras = @import("extras");
1111
12pub const data_soa = extras.StaticMultiList(Codepoint).initComptime(&data).items;12const data_soa = extras.StaticMultiList(Codepoint).initComptime(&data).items;
13pub const data_code = data_soa[0][0..].*;
14pub const data_name = data_soa[1][0..].*;
15pub const data_gc = data_soa[2][0..].*;
16pub const data_ccc = data_soa[3][0..].*;
17pub const data_bc = data_soa[4][0..].*;
18pub const data_decomp = data_soa[5][0..].*;
19pub const data_decomp_map = data_soa[6][0..].*;
20pub const data_nt_dec = data_soa[7][0..].*;
21pub const data_nt_dig = data_soa[8][0..].*;
22pub const data_nt_num = data_soa[9][0..].*;
23pub const data_bm = data_soa[10][0..].*;
24pub const data_sum = data_soa[11][0..].*;
25pub const data_slm = data_soa[12][0..].*;
26pub const data_stm = data_soa[13][0..].*;
1327
14pub const Codepoint = struct {28pub const Codepoint = struct {
15 u21, // U+ code29 u21, // U+ code
...@@ -49,8 +63,8 @@ pub const Decomposition = enum {...@@ -49,8 +63,8 @@ pub const Decomposition = enum {
49 narrow,63 narrow,
50};64};
5165
52pub fn find(cp: u21) Codepoint {66pub fn find(cp: u21) usize {
53 return data[binarySearchClosest(u21, data_soa[0], cp, compare)];67 return binarySearchClosest(u21, &data_code, cp, compare);
54}68}
5569
56fn binarySearchClosest(comptime T: type, items: []const T, context: anytype, comptime compareFn: fn (@TypeOf(context), T) std.math.Order) usize {70fn binarySearchClosest(comptime T: type, items: []const T, context: anytype, comptime compareFn: fn (@TypeOf(context), T) std.math.Order) usize {
...@@ -74,7 +88,7 @@ pub fn compare(needle: u21, row: u21) std.math.Order {...@@ -74,7 +88,7 @@ pub fn compare(needle: u21, row: u21) std.math.Order {
74 return .eq;88 return .eq;
75}89}
7690
77pub const data = [_]Codepoint{91const data = [_]Codepoint{
78 .{ 0x0000, "<control>", .Cc, 0, .BN, .__none, &.{}, "", "", "", false, null, null, null, },92 .{ 0x0000, "<control>", .Cc, 0, .BN, .__none, &.{}, "", "", "", false, null, null, null, },
79 .{ 0x0001, "<control>", .Cc, 0, .BN, .__none, &.{}, "", "", "", false, null, null, null, },93 .{ 0x0001, "<control>", .Cc, 0, .BN, .__none, &.{}, "", "", "", false, null, null, null, },
80 .{ 0x0002, "<control>", .Cc, 0, .BN, .__none, &.{}, "", "", "", false, null, null, null, },94 .{ 0x0002, "<control>", .Cc, 0, .BN, .__none, &.{}, "", "", "", false, null, null, null, },
test.zig+1-1
...@@ -35,6 +35,6 @@ test {...@@ -35,6 +35,6 @@ test {
35 _ = &ucd.script_extensions.data;35 _ = &ucd.script_extensions.data;
36 _ = &ucd.property_aliases.data;36 _ = &ucd.property_aliases.data;
37 _ = &ucd.property_value_aliases.data;37 _ = &ucd.property_value_aliases.data;
38 _ = &ucd.unicode_data.data;38 _ = &ucd.unicode_data.data_code;
39 _ = &ucd.special_casing.data;39 _ = &ucd.special_casing.data;
40}40}