diff options
| author | VÖRÖSKŐI András <voroskoi@gmail.com> | 2022-07-17 22:42:31 +0200 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-07-22 19:25:38 +0300 |
| commit | d925d19cfcabd96fdc4459e11ecb85a4f42ec655 (patch) | |
| tree | 40a6e32e492f72d72b21f38cba694d3e253e0956 /lib/std/priority_queue.zig | |
| parent | d1d892c83ca7beaf235147341b7e68d3619dd829 (diff) | |
| download | zig-d925d19cfcabd96fdc4459e11ecb85a4f42ec655.tar.gz zig-d925d19cfcabd96fdc4459e11ecb85a4f42ec655.zip | |
PriorityQueue: use compareFn in update()
update() calls mem.indexOfScalar() which uses `==` for comparing items,
which fails when the operator is not supported.
As PirorityQueue needs a comparing function anyway we can use `.eq` results
to identify matching objects.
closes #9918
Diffstat (limited to 'lib/std/priority_queue.zig')
| -rw-r--r-- | lib/std/priority_queue.zig | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/std/priority_queue.zig b/lib/std/priority_queue.zig index ebc13a9974..45b275f790 100644 --- a/lib/std/priority_queue.zig +++ b/lib/std/priority_queue.zig @@ -219,7 +219,12 @@ pub fn PriorityQueue(comptime T: type, comptime Context: type, comptime compareF } pub fn update(self: *Self, elem: T, new_elem: T) !void { - var update_index: usize = std.mem.indexOfScalar(T, self.items[0..self.len], elem) orelse return error.ElementNotFound; + const update_index = blk: { + for (self.items) |item, idx| { + if (compareFn(self.context, item, elem).compare(.eq)) break :blk idx; + } + return error.ElementNotFound; + }; const old_elem: T = self.items[update_index]; self.items[update_index] = new_elem; switch (compareFn(self.context, new_elem, old_elem)) { |
