| ... | @@ -190,26 +190,12 @@ pub fn PriorityQueue(comptime T: type) type { | ... | @@ -190,26 +190,12 @@ pub fn PriorityQueue(comptime T: type) type { |
| 190 | self.len = new_len; | 190 | self.len = new_len; |
| 191 | } | 191 | } |
| 192 | | 192 | |
| 193 | fn binarySearch(items: []const T, target: T) usize { | 193 | fn orderFn(lhs: T, rhs: T) std.math.Order { |
| 194 | var left: usize = 0; | 194 | return std.math.order(lhs, rhs); |
| 195 | var right: usize = items.len-1; | | |
| 196 | | | |
| 197 | while(left <= right) { | | |
| 198 | const mid = left + (right - left) / 2; | | |
| 199 | if (items[mid] == target) { | | |
| 200 | return mid; | | |
| 201 | } else if (items[mid] < target) { | | |
| 202 | left= mid+1; | | |
| 203 | } else { | | |
| 204 | right= mid-1; | | |
| 205 | } | | |
| 206 | } | | |
| 207 | | | |
| 208 | return 0; | | |
| 209 | } | 195 | } |
| 210 | | 196 | |
| 211 | pub fn update(self: *Self, elem: T, new_elem: T) !void { | 197 | pub fn update(self: *Self, elem: T, new_elem: T) !void { |
| 212 | var update_index: usize = binarySearch(self.items, elem); | 198 | var update_index: usize = std.sort.binarySearch(T, elem, self.items, orderFn) orelse 0; |
| 213 | assert (update_index >= 0 and update_index < self.items.len); | 199 | assert (update_index >= 0 and update_index < self.items.len); |
| 214 | _ = self.removeIndex(update_index); | 200 | _ = self.removeIndex(update_index); |
| 215 | try self.add(new_elem); | 201 | try self.add(new_elem); |