authorgravatar for bsvasan92@icloud.comBhargav Srinivasan <bsvasan92@icloud.com> 2020-09-22 01:05:33-07:00
committergravatar for bsvasan92@icloud.comBhargav Srinivasan <bsvasan92@icloud.com> 2020-09-22 01:05:33-07:00
logf083ea88d8a9fcfdc0e344b122207f6c7fe0be36
treebf7349b084f155fad867c5e59ffd22163f277366
parent26de64be138e6d53212ec1b362796d890dd42c7b

using binary search function from std.sort


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

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