| ... | @@ -102,12 +102,12 @@ pub fn StaticStringMapWithEql( | ... | @@ -102,12 +102,12 @@ pub fn StaticStringMapWithEql( |
| 102 | | 102 | |
| 103 | /// Returns a map backed by static, comptime allocated memory. | 103 | /// Returns a map backed by static, comptime allocated memory. |
| 104 | /// | 104 | /// |
| 105 | /// `V` must be `void`. The enum's tag names will be used as the keys. | 105 | /// `V` must be an enum. The enum's tag names will be used as the keys. |
| 106 | pub inline fn initEnum(comptime E: type) Self { | 106 | pub inline fn initEnum() Self { |
| 107 | comptime { | 107 | comptime { |
| 108 | var self: Self = .{}; | 108 | var self: Self = .{}; |
| 109 | | 109 | |
| 110 | const field_names = @typeInfo(E).@"enum".field_names; | 110 | const field_names = @typeInfo(V).@"enum".field_names; |
| 111 | if (field_names.len == 0) return self; | 111 | if (field_names.len == 0) return self; |
| 112 | | 112 | |
| 113 | // Since the KVs are sorted, a linearly-growing bound will never | 113 | // Since the KVs are sorted, a linearly-growing bound will never |
| ... | @@ -116,7 +116,8 @@ pub fn StaticStringMapWithEql( | ... | @@ -116,7 +116,8 @@ pub fn StaticStringMapWithEql( |
| 116 | @setEvalBranchQuota(10 * field_names.len * std.math.log2_int_ceil(usize, field_names.len)); | 116 | @setEvalBranchQuota(10 * field_names.len * std.math.log2_int_ceil(usize, field_names.len)); |
| 117 | | 117 | |
| 118 | var sorted_keys: [field_names.len][]const u8 = field_names[0..field_names.len].*; | 118 | var sorted_keys: [field_names.len][]const u8 = field_names[0..field_names.len].*; |
| 119 | var sorted_vals: [field_names.len]V = @splat({}); | 119 | var sorted_vals: [field_names.len]V = undefined; |
| | 120 | for (&sorted_vals, @typeInfo(V).@"enum".field_values) |*x, i| x.* = @enumFromInt(i); |
| 120 | | 121 | |
| 121 | for (field_names) |field_name| { | 122 | for (field_names) |field_name| { |
| 122 | self.min_len = @min(self.min_len, field_name.len); | 123 | self.min_len = @min(self.min_len, field_name.len); |
| ... | @@ -584,12 +585,12 @@ test "sorting kvs doesn't exceed eval branch quota" { | ... | @@ -584,12 +585,12 @@ test "sorting kvs doesn't exceed eval branch quota" { |
| 584 | | 585 | |
| 585 | test "initEnum" { | 586 | test "initEnum" { |
| 586 | const UnsortedEnum = enum { BB, A, CCC, DDD }; | 587 | const UnsortedEnum = enum { BB, A, CCC, DDD }; |
| 587 | const map = StaticStringMap(void).initEnum(UnsortedEnum); | 588 | const map = StaticStringMap(UnsortedEnum).initEnum(); |
| 588 | try testing.expect(map.has("A")); | 589 | try testing.expect(map.has("A")); |
| 589 | try testing.expect(!map.has("a")); | 590 | try testing.expect(!map.has("a")); |
| 590 | try testing.expectEqual(0, map.getIndex("BB")); | 591 | try testing.expectEqual(.BB, map.get("BB")); |
| 591 | try testing.expectEqual(1, map.getIndex("A")); | 592 | try testing.expectEqual(.A, map.get("A")); |
| 592 | try testing.expectEqual(2, map.getIndex("CCC")); | 593 | try testing.expectEqual(.CCC, map.get("CCC")); |
| 593 | try testing.expectEqual(3, map.getIndex("DDD")); | 594 | try testing.expectEqual(.DDD, map.get("DDD")); |
| 594 | try testing.expectEqual(null, map.getIndex("F")); | 595 | try testing.expectEqual(null, map.getIndex("F")); |
| 595 | } | 596 | } |