On Sun, Dec 6, 2009 at 5:51 PM, Uwe Schindler <u...@thetaphi.de> wrote:
>> On Sun, Dec 06, 2009 at 05:31:53PM -0500, Erick Erickson wrote:
>> > This may be a silly question, and I admit that I haven't looked a the
>> code,
>> > but was there a good reason to +1 it in the first place or was that just
>> > paranoia to prevent off-by-one errors?
>>
>> IIRC, this implementation of the priority queue algo leaves open slot 0 to
>> simplify internal calculations.  It was that way when I ported 1.4.3, and
>> I
>> doubt that's changed.
>
> Thats still the same. Because calculations in heaps are simplier when
> 1-based. Because of that heap[0] is unused.

Thanks for raising this Erick... it's a good question.  Technically,
removing the +1 would be a bug if anyone ever inserted 2B items into
the PQ, but I think this is exceptionally unlikely to occur in
practice.

>> > If there *was* a valid reason, might it make sense to
>> > +1 min(nDocs, maxDoc())?
>>
>> I think the patch is fine.  It's really only needed to provide a more
>> accurate
>> error message in the event somebody specifies that they want
>> Integer.MAX_VALUE
>> elements, not realizing that they will be allocated up front rather than
>> lazily -- they'll get an OOME rather than a NegativeArraySizeException.
>
> The new patch is more intelligent, it will not allocate such a big queue as
> far as I have seen. It takes the numDocs() of index reader/searcher into
> account.

Hmm actually it takes maxDoc() into account, but it should in fact use
numDocs().  I'll fix.

Mike

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-dev-h...@lucene.apache.org

Reply via email to