| ... | @@ -28,8 +28,11 @@ pub fn MultiArrayList(comptime S: type) type { | ... | @@ -28,8 +28,11 @@ pub fn MultiArrayList(comptime S: type) type { |
| 28 | capacity: usize, | 28 | capacity: usize, |
| 29 | | 29 | |
| 30 | pub fn items(self: Slice, comptime field: Field) []FieldType(field) { | 30 | pub fn items(self: Slice, comptime field: Field) []FieldType(field) { |
| 31 | const byte_ptr = self.ptrs[@enumToInt(field)]; | | |
| 32 | const F = FieldType(field); | 31 | const F = FieldType(field); |
| | 32 | if (self.len == 0) { |
| | 33 | return &[_]F{}; |
| | 34 | } |
| | 35 | const byte_ptr = self.ptrs[@enumToInt(field)]; |
| 33 | const casted_ptr = @ptrCast([*]F, @alignCast(@alignOf(F), byte_ptr)); | 36 | const casted_ptr = @ptrCast([*]F, @alignCast(@alignOf(F), byte_ptr)); |
| 34 | return casted_ptr[0..self.len]; | 37 | return casted_ptr[0..self.len]; |
| 35 | } | 38 | } |
| ... | @@ -300,6 +303,8 @@ test "basic usage" { | ... | @@ -300,6 +303,8 @@ test "basic usage" { |
| 300 | var list = MultiArrayList(Foo){}; | 303 | var list = MultiArrayList(Foo){}; |
| 301 | defer list.deinit(ally); | 304 | defer list.deinit(ally); |
| 302 | | 305 | |
| | 306 | testing.expectEqual(@as(usize, 0), list.items(.a).len); |
| | 307 | |
| 303 | try list.ensureCapacity(ally, 2); | 308 | try list.ensureCapacity(ally, 2); |
| 304 | | 309 | |
| 305 | list.appendAssumeCapacity(.{ | 310 | list.appendAssumeCapacity(.{ |