aboutsummaryrefslogtreecommitdiff
path: root/lib/std/priority_queue.zig
diff options
context:
space:
mode:
authorBhargav Srinivasan <bsvasan92@icloud.com>2020-09-22 01:05:33 -0700
committerBhargav Srinivasan <bsvasan92@icloud.com>2020-09-22 01:05:33 -0700
commitf083ea88d8a9fcfdc0e344b122207f6c7fe0be36 (patch)
treebf7349b084f155fad867c5e59ffd22163f277366 /lib/std/priority_queue.zig
parent26de64be138e6d53212ec1b362796d890dd42c7b (diff)
downloadzig-f083ea88d8a9fcfdc0e344b122207f6c7fe0be36.tar.gz
zig-f083ea88d8a9fcfdc0e344b122207f6c7fe0be36.zip
using binary search function from std.sort
Diffstat (limited to 'lib/std/priority_queue.zig')
-rw-r--r--lib/std/priority_queue.zig20
1 files changed, 3 insertions, 17 deletions
diff --git a/lib/std/priority_queue.zig b/lib/std/priority_queue.zig
index c91af77dfe..a074fbec19 100644
--- a/lib/std/priority_queue.zig
+++ b/lib/std/priority_queue.zig
@@ -190,26 +190,12 @@ pub fn PriorityQueue(comptime T: type) type {
self.len = new_len;
}
- fn binarySearch(items: []const T, target: T) usize {
- var left: usize = 0;
- var right: usize = items.len-1;
-
- while(left <= right) {
- const mid = left + (right - left) / 2;
- if (items[mid] == target) {
- return mid;
- } else if (items[mid] < target) {
- left= mid+1;
- } else {
- right= mid-1;
- }
- }
-
- return 0;
+ fn orderFn(lhs: T, rhs: T) std.math.Order {
+ return std.math.order(lhs, rhs);
}
pub fn update(self: *Self, elem: T, new_elem: T) !void {
- var update_index: usize = binarySearch(self.items, elem);
+ var update_index: usize = std.sort.binarySearch(T, elem, self.items, orderFn) orelse 0;
assert (update_index >= 0 and update_index < self.items.len);
_ = self.removeIndex(update_index);
try self.add(new_elem);