mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 02:34:00 +00:00
Fixes the heap fix.
This commit is contained in:
@@ -59,17 +59,35 @@ PriorityQueue
|
|||||||
|
|
||||||
proc/Dequeue()
|
proc/Dequeue()
|
||||||
if(!queue.len)
|
if(!queue.len)
|
||||||
return
|
return 0
|
||||||
return Remove(1)
|
return Remove(1)
|
||||||
|
|
||||||
proc/Remove(index)
|
proc/Remove(var/index)
|
||||||
if(index > queue.len)
|
if(index > queue.len)
|
||||||
return
|
return 0
|
||||||
|
|
||||||
var/thing = queue[index]
|
var/thing = queue[index]
|
||||||
queue.Cut(index, index + 1)
|
queue.Swap(index, queue.len)
|
||||||
|
queue.Cut(queue.len)
|
||||||
|
if(index < queue.len)
|
||||||
|
FixQueue(index)
|
||||||
return thing
|
return thing
|
||||||
|
|
||||||
|
proc/FixQueue(var/index)
|
||||||
|
var/child = 2 * index
|
||||||
|
var/item = queue[index]
|
||||||
|
|
||||||
|
while(child <= queue.len)
|
||||||
|
if(child < queue.len && call(comparison_function)(queue[child], queue[child + 1]) > 0)
|
||||||
|
child++
|
||||||
|
if(call(comparison_function)(item, queue[child]) > 0)
|
||||||
|
queue[index] = queue[child]
|
||||||
|
index = child
|
||||||
|
else
|
||||||
|
break
|
||||||
|
child = 2 * index
|
||||||
|
queue[index] = item
|
||||||
|
|
||||||
proc/List()
|
proc/List()
|
||||||
return queue.Copy()
|
return queue.Copy()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user