Commit 0e5e001278

Jacob Young <jacobly0@users.noreply.github.com>
2023-03-26 09:27:35
std.MultiArrayList: add set and get to Slice
1 parent 86625c5
Changed files (1)
lib/std/multi_array_list.zig
@@ -49,6 +49,20 @@ pub fn MultiArrayList(comptime S: type) type {
                 return casted_ptr[0..self.len];
             }
 
+            pub fn set(self: Slice, index: usize, elem: S) void {
+                inline for (fields) |field_info| {
+                    self.items(@field(Field, field_info.name))[index] = @field(elem, field_info.name);
+                }
+            }
+
+            pub fn get(self: Slice, index: usize) S {
+                var elem: S = undefined;
+                inline for (fields) |field_info| {
+                    @field(elem, field_info.name) = self.items(@field(Field, field_info.name))[index];
+                }
+                return elem;
+            }
+
             pub fn toMultiArrayList(self: Slice) Self {
                 if (self.ptrs.len == 0) {
                     return .{};
@@ -156,20 +170,12 @@ pub fn MultiArrayList(comptime S: type) type {
 
         /// Overwrite one array element with new data.
         pub fn set(self: *Self, index: usize, elem: S) void {
-            const slices = self.slice();
-            inline for (fields, 0..) |field_info, i| {
-                slices.items(@intToEnum(Field, i))[index] = @field(elem, field_info.name);
-            }
+            return self.slice().set(index, elem);
         }
 
         /// Obtain all the data for one array element.
         pub fn get(self: Self, index: usize) S {
-            const slices = self.slice();
-            var result: S = undefined;
-            inline for (fields, 0..) |field_info, i| {
-                @field(result, field_info.name) = slices.items(@intToEnum(Field, i))[index];
-            }
-            return result;
+            return self.slice().get(index);
         }
 
         /// Extend the list by 1 element. Allocates more memory as necessary.