authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-14 10:01:45-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-14 10:01:45-04:00
logb44332f5a663c8e96e546d6a2b6071bf96ce9bcb
tree256601da94f9a2fd05b793d78377999b6a8fa1f4
parenta0c1498e65d34e4f7d003ef1a804a87fa6c83ed3

std.ArrayList - rename remove to swapRemove


1 files changed, 22 insertions(+), 21 deletions(-)

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