| ... | @@ -621,15 +621,19 @@ pub fn ArrayHashMapUnmanaged( | ... | @@ -621,15 +621,19 @@ pub fn ArrayHashMapUnmanaged( |
| 621 | | 621 | |
| 622 | pub fn init(allocator: Allocator, key_list: []const K, value_list: []const V) !Self { | 622 | pub fn init(allocator: Allocator, key_list: []const K, value_list: []const V) !Self { |
| 623 | var self: Self = .{}; | 623 | var self: Self = .{}; |
| | 624 | errdefer self.deinit(allocator); |
| | 625 | try self.reinit(allocator, key_list, value_list); |
| | 626 | return self; |
| | 627 | } |
| | 628 | |
| | 629 | pub fn reinit(self: *Self, allocator: Allocator, key_list: []const K, value_list: []const V) !void { |
| 624 | try self.entries.resize(allocator, key_list.len); | 630 | try self.entries.resize(allocator, key_list.len); |
| 625 | errdefer self.entries.deinit(allocator); | | |
| 626 | @memcpy(self.keys(), key_list); | 631 | @memcpy(self.keys(), key_list); |
| 627 | if (@sizeOf(V) != 0) { | 632 | if (@sizeOf(V) != 0) { |
| 628 | assert(key_list.len == value_list.len); | 633 | assert(key_list.len == value_list.len); |
| 629 | @memcpy(self.values(), value_list); | 634 | @memcpy(self.values(), value_list); |
| 630 | } | 635 | } |
| 631 | try self.reIndex(allocator); | 636 | try self.reIndex(allocator); |
| 632 | return self; | | |
| 633 | } | 637 | } |
| 634 | | 638 | |
| 635 | /// Frees the backing allocation and leaves the map in an undefined state. | 639 | /// Frees the backing allocation and leaves the map in an undefined state. |