public void Or(DocIdSetIterator iter)
{
if (iter is OpenBitSetIterator && iter.DocID() == -1)
{
OpenBitSetIterator obs = (OpenBitSetIterator)iter;
Or(obs.Arr, obs.Words);
// advance after last doc that would be accepted if standard
// iteration is used (to exhaust it):
obs.Advance(NumBits);
}
else if (iter is FixedBitSetIterator && iter.DocID() == -1)
{
FixedBitSetIterator fbs = (FixedBitSetIterator)iter;
Or(fbs.bits, fbs.NumWords);
// advance after last doc that would be accepted if standard
// iteration is used (to exhaust it):
fbs.Advance(NumBits);
}
else
{
int doc;
while ((doc = iter.NextDoc()) < NumBits)
{
Set(doc);
}
}
}