adding what is hopefully a bit more safety to table.
This commit is contained in:
parent
73a91195b6
commit
b1ac3f4631
|
@ -110,9 +110,13 @@ pub fn Table(comptime K: type, comptime V: type) type {
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
self.len += 1;
|
self.len += 1;
|
||||||
|
errdefer self.len -= 1;
|
||||||
try self.keys.append(key);
|
try self.keys.append(key);
|
||||||
|
errdefer self.keys.shrinkRetainingCapacity(self.len - 1);
|
||||||
try self.values.append(val);
|
try self.values.append(val);
|
||||||
|
errdefer self.values.shrinkRetainingCapacity(self.len - 1);
|
||||||
try self.gens.append(0);
|
try self.gens.append(0);
|
||||||
|
errdefer self.gens.shrinkRetainingCapacity(self.len - 1);
|
||||||
|
|
||||||
assert(self.len == self.keys.items.len);
|
assert(self.len == self.keys.items.len);
|
||||||
assert(self.keys.items.len == self.values.items.len);
|
assert(self.keys.items.len == self.values.items.len);
|
||||||
|
@ -134,6 +138,8 @@ pub fn Table(comptime K: type, comptime V: type) type {
|
||||||
pub fn remove(self: *Self, id: Id) !V {
|
pub fn remove(self: *Self, id: Id) !V {
|
||||||
assert(self.len > 0);
|
assert(self.len > 0);
|
||||||
|
|
||||||
|
try self.free_list.push(id.index);
|
||||||
|
|
||||||
const uindex = @as(usize, id.index);
|
const uindex = @as(usize, id.index);
|
||||||
|
|
||||||
const key = self.keys.items[uindex] orelse unreachable;
|
const key = self.keys.items[uindex] orelse unreachable;
|
||||||
|
@ -142,10 +148,9 @@ pub fn Table(comptime K: type, comptime V: type) type {
|
||||||
|
|
||||||
self.keys.items[uindex] = null;
|
self.keys.items[uindex] = null;
|
||||||
|
|
||||||
self.gens.items[uindex] += 1;
|
self.gens.items[uindex] = self.gens.items[uindex] +% 1;
|
||||||
const val = self.values.items[uindex] orelse unreachable;
|
const val = self.values.items[uindex] orelse unreachable;
|
||||||
self.values.items[uindex] = null;
|
self.values.items[uindex] = null;
|
||||||
try self.free_list.push(id.index);
|
|
||||||
self.len -= 1;
|
self.len -= 1;
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue