From bfb31cbc33716220b42bb398471840a4fbed0d89 Mon Sep 17 00:00:00 2001 From: Jose Colon Rodriguez Date: Mon, 12 Feb 2024 10:51:34 -0400 Subject: Using Trie super slow --- src/gbp.zig | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/gbp.zig (limited to 'src/gbp.zig') diff --git a/src/gbp.zig b/src/gbp.zig new file mode 100644 index 0000000..fa4ad54 --- /dev/null +++ b/src/gbp.zig @@ -0,0 +1,67 @@ +const std = @import("std"); +const mem = std.mem; + +const gbp = @import("ziglyph").grapheme_break; +const Trie = @import("trie.zig").Trie; +const Prop = @import("trie.zig").Prop; + +var trie: Trie = undefined; + +pub fn init(allocator: mem.Allocator) !void { + trie = .{ .allocator = allocator, .root = .{} }; + + for ('\u{0}'..'\u{10ffff}') |i| { + const cp: u21 = @intCast(i); + const prop = Prop.forCodePoint(cp); + if (prop == .none) continue; + try trie.put(cp, prop); + } + + const prop = Prop.forCodePoint('\u{10ffff}'); + if (prop == .none) return; + try trie.put('\u{10ffff}', prop); +} + +inline fn getProp(cp: u21) Prop { + return if (trie.get(cp)) |prop| prop else .none; +} + +pub inline fn isControl(cp: u21) bool { + return getProp(cp) == .control; +} + +pub inline fn isExtend(cp: u21) bool { + return getProp(cp) == .extend; +} + +pub inline fn isL(cp: u21) bool { + return getProp(cp) == .hangul_l; +} +pub inline fn isLv(cp: u21) bool { + return getProp(cp) == .hangul_lv; +} +pub inline fn isLvt(cp: u21) bool { + return getProp(cp) == .hangul_lvt; +} +pub inline fn isV(cp: u21) bool { + return getProp(cp) == .hangul_v; +} +pub inline fn isT(cp: u21) bool { + return getProp(cp) == .hangul_t; +} + +pub inline fn isPrepend(cp: u21) bool { + return getProp(cp) == .prepend; +} + +pub inline fn isRegionalIndicator(cp: u21) bool { + return getProp(cp) == .regional; +} + +pub inline fn isSpacingmark(cp: u21) bool { + return getProp(cp) == .spacing; +} + +pub inline fn isZwj(cp: u21) bool { + return getProp(cp) == .zwj; +} -- cgit v1.2.3