authorgravatar for bsvasan92@icloud.comBhargav Srinivasan <bsvasan92@icloud.com> 2020-09-22 01:50:22-07:00
committergravatar for bsvasan92@icloud.comBhargav Srinivasan <bsvasan92@icloud.com> 2020-09-22 01:50:22-07:00
log1345f87f4efb7444516fceb76b1d60ec18ddebc1
tree33b00ef6e623ca4e2e46c9b82f584183d0c134bf
parent69f0fc513a1926e6214733c678f785b724da0340

items are not sorted, using linear search


1 files changed, 10 insertions(+), 3 deletions(-)

lib/std/priority_queue.zig+10-3
...@@ -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 }
192192
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 }
196203
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);