| ... | @@ -190,12 +190,19 @@ pub fn PriorityQueue(comptime T: type) type { | ... | @@ -190,12 +190,19 @@ pub fn PriorityQueue(comptime T: type) type { |
| 190 | self.len = new_len; | 190 | self.len = new_len; |
| 191 | } | 191 | } |
| 192 | | 192 | |
| 193 | fn orderFn(lhs: T, rhs: T) std.math.Order { | 193 | fn linearSearch(elem: T, items: []const T) usize { |
| 194 | return std.math.order(lhs, rhs); | 194 | var found: usize = 0; |
| | 195 | for (items) |item, i| { |
| | 196 | if (item == elem) { |
| | 197 | found = i; |
| | 198 | break; |
| | 199 | } |
| | 200 | } |
| | 201 | return found; |
| 195 | } | 202 | } |
| 196 | | 203 | |
| 197 | pub fn update(self: *Self, elem: T, new_elem: T) !void { | 204 | pub fn update(self: *Self, elem: T, new_elem: T) !void { |
| 198 | var update_index: usize = std.sort.binarySearch(T, elem, self.items, {}, orderFn) orelse 0; | 205 | var update_index: usize = linearSearch(elem, self.items); |
| 199 | assert (update_index >= 0 and update_index < self.items.len); | 206 | assert (update_index >= 0 and update_index < self.items.len); |
| 200 | _ = self.removeIndex(update_index); | 207 | _ = self.removeIndex(update_index); |
| 201 | try self.add(new_elem); | 208 | try self.add(new_elem); |