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)) } }