(phixonline)-->
with javascript_semantics
constant tasklist = new_dict()
procedure add_task(integer priority, string desc)
integer k = getd_index(priority,tasklist)
if k=0 then
putd(priority,{desc},tasklist)
else
sequence descs = getd_by_index(k,tasklist)
putd(priority,append(descs,desc),tasklist)
end if
end procedure
function list_task_visitor(integer priority, sequence descs, integer /*user_data*/)
?{priority,descs}
return true -- continue
end function
procedure list_tasks()
traverse_dict(list_task_visitor, 0, tasklist, true)
end procedure
function pop_task_visitor(integer priority, sequence descs, integer rid)
string desc = descs[1]
descs = descs[2..$]
if length(descs)=0 then
deld(priority,tasklist)
else
putd(priority,descs,tasklist)
end if
rid(priority,desc)
return false -- stop
end function
procedure pop_task(integer rid)
if dict_size(tasklist)!=0 then
traverse_dict(pop_task_visitor, rid, tasklist, true)
end if
end procedure
add_task(3,"Clear drains")
add_task(4,"Feed cat")
add_task(5,"Make tea")
add_task(1,"Solve RC tasks")
add_task(2,"Tax return")
procedure do_task(integer priority, string desc)
?{priority,desc}
end procedure
list_tasks()
?"==="
pop_task(do_task)
?"==="
list_tasks()