Priority queue in Developer Help
|
|
Code:
prioqueue var value item prioqueue/next New() world << "New prioqueue" value=999999999 item=null next=null return src Del() if(next==null) world << "del terminator" ..() else del next world << "del [item]=[value]" ..() return proc insert(newvalue,newitem) if(newvalue>=value) if(item==newitem) return else next.insert(newvalue,newitem) else var/prioqueue/p=new() p.value=value; p.item=item; p.next=next value=newvalue; item=newitem; next=p return remfirst() world << "remfirst creating returnval" var/prioqueue/returnval=new() world << "inserting 1st item to returnval" returnval.insert(value,item) world << "returnval=[returnval.totext()] src=[totext()]" world << "setting src=next" src=next world << "returning returnval=[returnval.totext()] src=[totext()]" return returnval totext() if(next==null) return "" return "[item]=[value] [next.totext()]"
mob verb testqueue() var/prioqueue/P=new() world << "newed P=[P.totext()]" P.insert(10,"A") world << "inserted A, P=[P.totext()]" P.insert(20,"B") world << "inserted B, P=[P.totext()]" world << "creating Q to get 1st item" var/prioqueue/Q=new() world << "calling Q=P.remfirst()" Q = P.remfirst() world << "final result Q=[Q.totext()] P=[P.totext()]"
|
Problem description:
In remfirst(), I want it to return the 1st node, then set the queue to the next node. src=next appears to set the queue to the next node, but after returning it didn't really do anything.
Here's the output:
New prioqueue
newed P=
New prioqueue
inserted A, P=A=10
New prioqueue
inserted B, P=A=10 B=20
creating Q to get 1st item
New prioqueue
calling Q=P.remfirst()
remfirst creating returnval
New prioqueue
inserting 1st item to returnval
New prioqueue
returnval=A=10 src=A=10 B=20
setting temp=src
setting src=next
returning returnval=A=10 src=B=20
del terminator
final result Q=A=10 P=A=10 B=20
del terminator
del A=10
del terminator
del B=20
del A=10
|