| ... | @@ -204,8 +204,13 @@ pub fn PriorityQueue(comptime T: type) type { | ... | @@ -204,8 +204,13 @@ pub fn PriorityQueue(comptime T: type) type { |
| 204 | pub fn update(self: *Self, elem: T, new_elem: T) !void { | 204 | pub fn update(self: *Self, elem: T, new_elem: T) !void { |
| 205 | var update_index: usize = linearSearch(elem, self.items); | 205 | var update_index: usize = linearSearch(elem, self.items); |
| 206 | assert (update_index >= 0 and update_index < self.items.len); | 206 | assert (update_index >= 0 and update_index < self.items.len); |
| 207 | _ = self.removeIndex(update_index); | 207 | // Heapreplace: |
| 208 | try self.add(new_elem); | 208 | // replace the item: self.items[update_index]= new_elem; |
| | 209 | // swap the new item to the top of the heap: std.mem.swap(heap[0], heap[update_index]); |
| | 210 | // sift up or down: which has been generically implemented as sift down: siftDown(self, 0) |
| | 211 | self.items[update_index] = new_elem; |
| | 212 | std.mem.swap(T, &self.items[0], &self.items[update_index]); |
| | 213 | siftDown(self, 0); |
| 209 | } | 214 | } |
| 210 | | 215 | |
| 211 | pub const Iterator = struct { | 216 | pub const Iterator = struct { |