| ... | ... | @@ -49,6 +49,20 @@ pub fn MultiArrayList(comptime S: type) type { |
| 49 | 49 | return casted_ptr[0..self.len]; |
| 50 | 50 | } |
| 51 | 51 | |
| 52 | pub fn set(self: Slice, index: usize, elem: S) void { |
| 53 | inline for (fields) |field_info| { |
| 54 | self.items(@field(Field, field_info.name))[index] = @field(elem, field_info.name); |
| 55 | } |
| 56 | } |
| 57 | |
| 58 | pub fn get(self: Slice, index: usize) S { |
| 59 | var elem: S = undefined; |
| 60 | inline for (fields) |field_info| { |
| 61 | @field(elem, field_info.name) = self.items(@field(Field, field_info.name))[index]; |
| 62 | } |
| 63 | return elem; |
| 64 | } |
| 65 | |
| 52 | 66 | pub fn toMultiArrayList(self: Slice) Self { |
| 53 | 67 | if (self.ptrs.len == 0) { |
| 54 | 68 | return .{}; |
| ... | ... | @@ -156,20 +170,12 @@ pub fn MultiArrayList(comptime S: type) type { |
| 156 | 170 | |
| 157 | 171 | /// Overwrite one array element with new data. |
| 158 | 172 | pub fn set(self: *Self, index: usize, elem: S) void { |
| 159 | | const slices = self.slice(); |
| 160 | | inline for (fields, 0..) |field_info, i| { |
| 161 | | slices.items(@intToEnum(Field, i))[index] = @field(elem, field_info.name); |
| 162 | | } |
| 173 | return self.slice().set(index, elem); |
| 163 | 174 | } |
| 164 | 175 | |
| 165 | 176 | /// Obtain all the data for one array element. |
| 166 | 177 | pub fn get(self: Self, index: usize) S { |
| 167 | | const slices = self.slice(); |
| 168 | | var result: S = undefined; |
| 169 | | inline for (fields, 0..) |field_info, i| { |
| 170 | | @field(result, field_info.name) = slices.items(@intToEnum(Field, i))[index]; |
| 171 | | } |
| 172 | | return result; |
| 178 | return self.slice().get(index); |
| 173 | 179 | } |
| 174 | 180 | |
| 175 | 181 | /// Extend the list by 1 element. Allocates more memory as necessary. |