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