authorgravatar for tgschultz@gmail.comtgschultz <tgschultz@gmail.com> 2018-07-11 12:52:30-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-14 09:55:47-04:00
loga0c1498e65d34e4f7d003ef1a804a87fa6c83ed3
tree95ee5da188a59135926c10f80780625527baeeff
parent317ed57cb1e238664a123b940f4a50697653a9bb

Added `remove` to ArrayList


1 files changed, 47 insertions(+), 1 deletions(-)

std/array_list.zig+47-1
......@@ -101,6 +101,25 @@ pub fn AlignedArrayList(comptime T: type, comptime A: u29) type {
101101 const new_item_ptr = try self.addOne();
102102 new_item_ptr.* = item;
103103 }
104
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());
112 return old_item;
113 }
114
115 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
119 var old_item = self.at(n);
120 try self.setOrError(n, self.pop());
121 return old_item;
122 }
104123
105124 pub fn appendSlice(self: *Self, items: []align(A) const T) !void {
106125 try self.ensureCapacity(self.len + items.len);
......@@ -157,7 +176,7 @@ pub fn AlignedArrayList(comptime T: type, comptime A: u29) type {
157176 it.count += 1;
158177 return val;
159178 }
160
179
161180 pub fn reset(it: *Iterator) void {
162181 it.count = 0;
163182 }
......@@ -232,6 +251,33 @@ test "basic ArrayList test" {
232251 assert(list.pop() == 33);
233252}
234253
254test "remove ArrayList test" {
255 var list = ArrayList(i32).init(debug.global_allocator);
256 defer list.deinit();
257
258 try list.append(1);
259 try list.append(2);
260 try list.append(3);
261 try list.append(4);
262 try list.append(5);
263 try list.append(6);
264 try list.append(7);
265
266 //remove from middle
267 assert(list.remove(3) == 4);
268 assert(list.at(3) == 7);
269 assert(list.len == 6);
270
271 //remove from end
272 assert(list.remove(5) == 6);
273 assert(list.len == 5);
274
275 //remove from front
276 assert(list.remove(0) == 1);
277 assert(list.at(0) == 5);
278 assert(list.len == 4);
279}
280
235281test "iterator ArrayList test" {
236282 var list = ArrayList(i32).init(debug.global_allocator);
237283 defer list.deinit();