diff options
| author | LemonBoy <thatlemon@gmail.com> | 2021-03-11 23:05:46 +0100 |
|---|---|---|
| committer | Isaac Freund <ifreund@ifreund.xyz> | 2021-03-12 00:17:35 +0100 |
| commit | 482424e2b12cfcfe71280c826a2d31cb5df13a1a (patch) | |
| tree | 41a28f6fc82dee2ce01084e130001ed4b24e9448 /lib/std/multi_array_list.zig | |
| parent | 4fc6f631e044b5ddfff6c610f04f3619a1bbeb8d (diff) | |
| download | zig-482424e2b12cfcfe71280c826a2d31cb5df13a1a.tar.gz zig-482424e2b12cfcfe71280c826a2d31cb5df13a1a.zip | |
std: Handle empty MultiArrayList in items()
Closes #8211
Diffstat (limited to 'lib/std/multi_array_list.zig')
| -rw-r--r-- | lib/std/multi_array_list.zig | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/std/multi_array_list.zig b/lib/std/multi_array_list.zig index 37c4456d22..f4d89d198c 100644 --- a/lib/std/multi_array_list.zig +++ b/lib/std/multi_array_list.zig @@ -28,8 +28,11 @@ pub fn MultiArrayList(comptime S: type) type { capacity: usize, pub fn items(self: Slice, comptime field: Field) []FieldType(field) { - const byte_ptr = self.ptrs[@enumToInt(field)]; const F = FieldType(field); + if (self.len == 0) { + return &[_]F{}; + } + const byte_ptr = self.ptrs[@enumToInt(field)]; const casted_ptr = @ptrCast([*]F, @alignCast(@alignOf(F), byte_ptr)); return casted_ptr[0..self.len]; } @@ -300,6 +303,8 @@ test "basic usage" { var list = MultiArrayList(Foo){}; defer list.deinit(ally); + testing.expectEqual(@as(usize, 0), list.items(.a).len); + try list.ensureCapacity(ally, 2); list.appendAssumeCapacity(.{ |
