On 06/25/2012 01:17 PM, David Holmes wrote:
Hi Remi,

On 25/06/2012 7:01 PM, Rémi Forax wrote:
Hi David,
I think the test

if (n > 0) {

should not be in siftDown* but should be done at all callsites,
by example in heapify, you can hoist the test outside of the loop.

I originally had it at the call-site (it already exists in a number of them) but Doug prefers it to be internalized. He wrote:

"... a better strategy is to move the n > 0 check to the siftDown code itself, so (existing and potential) callers don't need the check. "

This can be mitigated by modifying the doc comment to say that n should be strictly positive.

"... an explicit n > 0 check acts to hoist array index checks in loop so turns out to be faster in general."

also true if n > 0 is done at callsites and methods shiftDown* is inlined, but this is not something that is easy to guarantee because it depends on the complexity of the comparator implementation.

so thumb up :)


In dequeue, it's a matter of style but the 'else' is not needed anymore.

Otherwise the changes looks ok for me.

Thanks,
David

cheers,
Rémi



Reply via email to