From 8af59d1f98266bd70b3afb44d196bbd151cedf22 Mon Sep 17 00:00:00 2001 From: Travis Staloch <1562827+travisstaloch@users.noreply.github.com> Date: Sat, 20 Apr 2024 23:14:39 -0700 Subject: ComptimeStringMap: return a regular struct and optimize this patch renames ComptimeStringMap to StaticStringMap, makes it accept only a single type parameter, and return a known struct type instead of an anonymous struct. initial motivation for these changes was to reduce the 'very long type names' issue described here https://github.com/ziglang/zig/pull/19682. this breaks the previous API. users will now need to write: `const map = std.StaticStringMap(T).initComptime(kvs_list);` * move `kvs_list` param from type param to an `initComptime()` param * new public methods * `keys()`, `values()` helpers * `init(allocator)`, `deinit(allocator)` for runtime data * `getLongestPrefix(str)`, `getLongestPrefixIndex(str)` - i'm not sure these belong but have left in for now incase they are deemed useful * performance notes: * i posted some benchmarking results here: https://github.com/travisstaloch/comptime-string-map-revised/issues/1 * i noticed a speedup reducing the size of the struct from 48 to 32 bytes and thus use u32s instead of usize for all length fields * i noticed speedup storing KVs as a struct of arrays * latest benchmark shows these wall_time improvements for debug/safe/small/fast builds: -6.6% / -10.2% / -19.1% / -8.9%. full output in link above. --- src/Compilation.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Compilation.zig') diff --git a/src/Compilation.zig b/src/Compilation.zig index 7af3d7bfd1..3532a9d5b5 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -265,7 +265,7 @@ pub const CRTFile = struct { /// Supported languages for "zig clang -x ". /// Loosely based on llvm-project/clang/include/clang/Driver/Types.def -pub const LangToExt = std.ComptimeStringMap(FileExt, .{ +pub const LangToExt = std.StaticStringMap(FileExt).initComptime(.{ .{ "c", .c }, .{ "c-header", .h }, .{ "c++", .cpp }, -- cgit v1.2.3