| ... | ... | @@ -41,8 +41,8 @@ pub fn AlignedArrayList(comptime T: type, comptime A: u29) type { |
| 41 | 41 | return self.items[0..self.len]; |
| 42 | 42 | } |
| 43 | 43 | |
| 44 | | pub fn at(self: Self, n: usize) T { |
| 45 | | return self.toSliceConst()[n]; |
| 44 | pub fn at(self: Self, i: usize) T { |
| 45 | return self.toSliceConst()[i]; |
| 46 | 46 | } |
| 47 | 47 | |
| 48 | 48 | /// Sets the value at index `i`, or returns `error.OutOfBounds` if |
| ... | ... | @@ -101,21 +101,22 @@ pub fn AlignedArrayList(comptime T: type, comptime A: u29) type { |
| 101 | 101 | const new_item_ptr = try self.addOne(); |
| 102 | 102 | new_item_ptr.* = item; |
| 103 | 103 | } |
| 104 | | |
| 104 | |
| 105 | 105 | /// Removes the element at the specified index and returns it. |
| 106 | | // The empty slot is filled from the end of the list. |
| 107 | | pub fn remove(self: *Self, n: usize) T { |
| 108 | | if(self.len - 1 == n) return self.pop(); |
| 109 | | |
| 110 | | var old_item = self.at(n); |
| 111 | | self.set(n, self.pop()); |
| 106 | /// The empty slot is filled from the end of the list. |
| 107 | pub fn swapRemove(self: *Self, i: usize) T { |
| 108 | if (self.len - 1 == i) return self.pop(); |
| 109 | |
| 110 | const slice = self.toSlice(); |
| 111 | const old_item = slice[i]; |
| 112 | slice[i] = self.pop(); |
| 112 | 113 | return old_item; |
| 113 | 114 | } |
| 114 | | |
| 115 | |
| 115 | 116 | pub fn removeOrError(self: *Self, n: usize) !T { |
| 116 | | if(n >= self.len) return error.OutOfBounds; |
| 117 | | if(self.len - 1 == n) return self.pop(); |
| 118 | | |
| 117 | if (n >= self.len) return error.OutOfBounds; |
| 118 | if (self.len - 1 == n) return self.pop(); |
| 119 | |
| 119 | 120 | var old_item = self.at(n); |
| 120 | 121 | try self.setOrError(n, self.pop()); |
| 121 | 122 | return old_item; |
| ... | ... | @@ -176,7 +177,7 @@ pub fn AlignedArrayList(comptime T: type, comptime A: u29) type { |
| 176 | 177 | it.count += 1; |
| 177 | 178 | return val; |
| 178 | 179 | } |
| 179 | | |
| 180 | |
| 180 | 181 | pub fn reset(it: *Iterator) void { |
| 181 | 182 | it.count = 0; |
| 182 | 183 | } |
| ... | ... | @@ -251,7 +252,7 @@ test "basic ArrayList test" { |
| 251 | 252 | assert(list.pop() == 33); |
| 252 | 253 | } |
| 253 | 254 | |
| 254 | | test "remove ArrayList test" { |
| 255 | test "std.ArrayList.swapRemove" { |
| 255 | 256 | var list = ArrayList(i32).init(debug.global_allocator); |
| 256 | 257 | defer list.deinit(); |
| 257 | 258 | |
| ... | ... | @@ -262,18 +263,18 @@ test "remove ArrayList test" { |
| 262 | 263 | try list.append(5); |
| 263 | 264 | try list.append(6); |
| 264 | 265 | try list.append(7); |
| 265 | | |
| 266 | |
| 266 | 267 | //remove from middle |
| 267 | | assert(list.remove(3) == 4); |
| 268 | assert(list.swapRemove(3) == 4); |
| 268 | 269 | assert(list.at(3) == 7); |
| 269 | 270 | assert(list.len == 6); |
| 270 | | |
| 271 | |
| 271 | 272 | //remove from end |
| 272 | | assert(list.remove(5) == 6); |
| 273 | assert(list.swapRemove(5) == 6); |
| 273 | 274 | assert(list.len == 5); |
| 274 | | |
| 275 | |
| 275 | 276 | //remove from front |
| 276 | | assert(list.remove(0) == 1); |
| 277 | assert(list.swapRemove(0) == 1); |
| 277 | 278 | assert(list.at(0) == 5); |
| 278 | 279 | assert(list.len == 4); |
| 279 | 280 | } |