Skip to content

Replace StaticStringMap with far more optimized version #21498

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
65 changes: 13 additions & 52 deletions lib/compiler/resinator/rc.zig
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,7 @@ pub const ResourceType = enum {
fontdir_num,
manifest_num,

const map = std.StaticStringMapWithEql(
ResourceType,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
const map = std.StaticStringMapIgnoreCase(ResourceType).initComptime(.{
.{ "ACCELERATORS", .accelerators },
.{ "BITMAP", .bitmap },
.{ "CURSOR", .cursor },
Expand Down Expand Up @@ -160,19 +157,13 @@ pub const OptionalStatements = enum {
menu,
style,

pub const map = std.StaticStringMapWithEql(
OptionalStatements,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
pub const map = std.StaticStringMapIgnoreCase(OptionalStatements).initComptime(.{
.{ "CHARACTERISTICS", .characteristics },
.{ "LANGUAGE", .language },
.{ "VERSION", .version },
});

pub const dialog_map = std.StaticStringMapWithEql(
OptionalStatements,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
pub const dialog_map = std.StaticStringMapIgnoreCase(OptionalStatements).initComptime(.{
.{ "CAPTION", .caption },
.{ "CLASS", .class },
.{ "EXSTYLE", .exstyle },
Expand Down Expand Up @@ -206,10 +197,7 @@ pub const Control = enum {
state3,
userbutton,

pub const map = std.StaticStringMapWithEql(
Control,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
pub const map = std.StaticStringMapIgnoreCase(Control).initComptime(.{
.{ "AUTO3STATE", .auto3state },
.{ "AUTOCHECKBOX", .autocheckbox },
.{ "AUTORADIOBUTTON", .autoradiobutton },
Expand Down Expand Up @@ -243,10 +231,7 @@ pub const Control = enum {
};

pub const ControlClass = struct {
pub const map = std.StaticStringMapWithEql(
res.ControlClass,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
pub const map = std.StaticStringMapIgnoreCase(res.ControlClass).initComptime(.{
.{ "BUTTON", .button },
.{ "EDIT", .edit },
.{ "STATIC", .static },
Expand Down Expand Up @@ -295,10 +280,7 @@ pub const MenuItem = enum {
menuitem,
popup,

pub const map = std.StaticStringMapWithEql(
MenuItem,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
pub const map = std.StaticStringMapIgnoreCase(MenuItem).initComptime(.{
.{ "MENUITEM", .menuitem },
.{ "POPUP", .popup },
});
Expand All @@ -315,10 +297,7 @@ pub const MenuItem = enum {
menubarbreak,
menubreak,

pub const map = std.StaticStringMapWithEql(
Option,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
pub const map = std.StaticStringMapIgnoreCase(Option).initComptime(.{
.{ "CHECKED", .checked },
.{ "GRAYED", .grayed },
.{ "HELP", .help },
Expand All @@ -333,10 +312,7 @@ pub const ToolbarButton = enum {
button,
separator,

pub const map = std.StaticStringMapWithEql(
ToolbarButton,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
pub const map = std.StaticStringMapIgnoreCase(ToolbarButton).initComptime(.{
.{ "BUTTON", .button },
.{ "SEPARATOR", .separator },
});
Expand All @@ -351,10 +327,7 @@ pub const VersionInfo = enum {
file_type,
file_subtype,

pub const map = std.StaticStringMapWithEql(
VersionInfo,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
pub const map = std.StaticStringMapIgnoreCase(VersionInfo).initComptime(.{
.{ "FILEVERSION", .file_version },
.{ "PRODUCTVERSION", .product_version },
.{ "FILEFLAGSMASK", .file_flags_mask },
Expand All @@ -369,10 +342,7 @@ pub const VersionBlock = enum {
block,
value,

pub const map = std.StaticStringMapWithEql(
VersionBlock,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
pub const map = std.StaticStringMapIgnoreCase(VersionBlock).initComptime(.{
.{ "BLOCK", .block },
.{ "VALUE", .value },
});
Expand All @@ -386,10 +356,7 @@ pub const TopLevelKeywords = enum {
characteristics,
stringtable,

pub const map = std.StaticStringMapWithEql(
TopLevelKeywords,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
pub const map = std.StaticStringMapIgnoreCase(TopLevelKeywords).initComptime(.{
.{ "LANGUAGE", .language },
.{ "VERSION", .version },
.{ "CHARACTERISTICS", .characteristics },
Expand All @@ -408,10 +375,7 @@ pub const CommonResourceAttributes = enum {
shared,
nonshared,

pub const map = std.StaticStringMapWithEql(
CommonResourceAttributes,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
pub const map = std.StaticStringMapIgnoreCase(CommonResourceAttributes).initComptime(.{
.{ "PRELOAD", .preload },
.{ "LOADONCALL", .loadoncall },
.{ "FIXED", .fixed },
Expand All @@ -432,10 +396,7 @@ pub const AcceleratorTypeAndOptions = enum {
shift,
control,

pub const map = std.StaticStringMapWithEql(
AcceleratorTypeAndOptions,
std.static_string_map.eqlAsciiIgnoreCase,
).initComptime(.{
pub const map = std.StaticStringMapIgnoreCase(AcceleratorTypeAndOptions).initComptime(.{
.{ "VIRTKEY", .virtkey },
.{ "ASCII", .ascii },
.{ "NOINVERT", .noinvert },
Expand Down
2 changes: 1 addition & 1 deletion lib/std/crypto/asn1/Oid.zig
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ pub fn StaticMap(comptime Enum: type) type {
oid_to_enum: std.StaticStringMap(Enum),
enum_to_oid: EnumToOid,

pub fn oidToEnum(self: @This(), encoded: []const u8) ?Enum {
pub fn oidToEnum(comptime self: @This(), encoded: []const u8) ?Enum {
return self.oid_to_enum.get(encoded);
}

Expand Down
5 changes: 2 additions & 3 deletions lib/std/meta.zig
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,14 @@ pub fn stringToEnum(comptime T: type, str: []const u8) ?T {
// - https://github.com/ziglang/zig/issues/4055
// - https://github.com/ziglang/zig/issues/3863
if (@typeInfo(T).@"enum".fields.len <= 100) {
const kvs = comptime build_kvs: {
const map = comptime build_kvs: {
const EnumKV = struct { []const u8, T };
var kvs_array: [@typeInfo(T).@"enum".fields.len]EnumKV = undefined;
for (@typeInfo(T).@"enum".fields, 0..) |enumField, i| {
kvs_array[i] = .{ enumField.name, @field(T, enumField.name) };
}
break :build_kvs kvs_array[0..];
break :build_kvs std.StaticStringMap(T).initComptime(kvs_array);
};
const map = std.StaticStringMap(T).initComptime(kvs);
return map.get(str);
} else {
inline for (@typeInfo(T).@"enum".fields) |enumField| {
Expand Down
Loading
Loading