21 lines
805 B
Plaintext
21 lines
805 B
Plaintext
class PQ{
|
|
fcn init(numLevels=10){ // 0..numLevels, bigger # == lower priorty
|
|
var [const] queue=(1).pump(numLevels+1,List.createLong(numLevels).write,L().copy);
|
|
}
|
|
fcn add(item,priorty){ queue[priorty].append(item); }
|
|
fcn peek{ if(q:=queue.filter1()) return(q[-1]); Void }// -->Void if empty
|
|
fcn pop { if(q:=queue.filter1()) return(q.pop()); Void }// -->Void if empty
|
|
var [private] state=L();
|
|
fcn [private] next{ // iterate
|
|
qi,ii:=state;
|
|
foreach n in ([qi..queue.len()-1]){
|
|
q:=queue[n];
|
|
if(ii>=q.len()) ii=0;
|
|
else{ state.clear().append(n,ii+1); return(q[ii]) }
|
|
}
|
|
Void.Stop
|
|
}
|
|
fcn walker{ state.clear().append(0,0); Walker(next) } // iterator front end
|
|
fcn toString{ "PQ(%d) items".fmt(queue.reduce(fcn(sum,q){ sum+q.len() },0)) }
|
|
}
|