Priority queue: Difference between revisions

Content added Content deleted
imported>Pjfarley3
m (Remove DYNAM compiler option from PROCESS compiler directives leading each program.)
 
Line 8,975: Line 8,975:
/// fn(T, T) bool
/// fn(T, T) bool
const Comparator = struct {
const Comparator = struct {
fn maxCompare(a: Task, b: Task) bool {
fn maxCompare(_: void, a: Task, b: Task) std.math.Order {
return a.priority > b.priority;
return std.math.order(a.priority, b.priority);
}
}


fn minCompare(a: Task, b: Task) bool {
fn minCompare(_: void, a: Task, b: Task) std.math.Order {
return a.priority < b.priority;
return std.math.order(a.priority, b.priority);
}
}
};
};
Line 8,987: Line 8,987:
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
defer arena.deinit();
var allocator = &arena.allocator;
const allocator = arena.allocator();
var pq = PriorityQueue(Task, void, Comparator.maxCompare).init(allocator, {});

var pq = PriorityQueue(Task).init(allocator, Comparator.maxCompare);
defer pq.deinit();
defer pq.deinit();


Line 8,997: Line 8,996:
try pq.add(Task.init(1, "Solve RC tasks"));
try pq.add(Task.init(1, "Solve RC tasks"));
try pq.add(Task.init(2, "Tax returns"));
try pq.add(Task.init(2, "Tax returns"));
testing.expectEqual(pq.count(), 5);
try testing.expectEqual(pq.count(), 5);


std.debug.print("\n", .{});
std.debug.print("\n", .{});
Line 9,004: Line 9,003:
while (pq.count() != 0) {
while (pq.count() != 0) {
const task = pq.remove();
const task = pq.remove();
std.debug.print("Executing: {} (priority {})\n", .{ task.name, task.priority });
std.debug.print("Executing: {s} (priority {d})\n", .{ task.name, task.priority });
}
}
std.debug.print("\n", .{});
std.debug.print("\n", .{});
Line 9,012: Line 9,011:
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
defer arena.deinit();
var allocator = &arena.allocator;
const allocator = arena.allocator();
var pq = PriorityQueue(Task, void, Comparator.minCompare).init(allocator, {});

var pq = PriorityQueue(Task).init(allocator, Comparator.minCompare);
defer pq.deinit();
defer pq.deinit();


Line 9,022: Line 9,020:
try pq.add(Task.init(1, "Solve RC tasks"));
try pq.add(Task.init(1, "Solve RC tasks"));
try pq.add(Task.init(2, "Tax returns"));
try pq.add(Task.init(2, "Tax returns"));
testing.expectEqual(pq.count(), 5);
try testing.expectEqual(pq.count(), 5);


std.debug.print("\n", .{});
std.debug.print("\n", .{});
Line 9,029: Line 9,027:
while (pq.count() != 0) {
while (pq.count() != 0) {
const task = pq.remove();
const task = pq.remove();
std.debug.print("Executing: {} (priority {})\n", .{ task.name, task.priority });
std.debug.print("Executing: {s} (priority {d})\n", .{ task.name, task.priority });
}
}
std.debug.print("\n", .{});
std.debug.print("\n", .{});
}
}

</syntaxhighlight>
</syntaxhighlight>