private void DoChain(OpenBitSetDISI result, Logic logic, DocIdSet dis)
{
if (dis is OpenBitSet)
{
// optimized case for OpenBitSets
switch (logic)
{
case Logic.OR:
result.Or((OpenBitSet)dis);
break;
case Logic.AND:
result.And((OpenBitSet)dis);
break;
case Logic.ANDNOT:
result.AndNot((OpenBitSet)dis);
break;
case Logic.XOR:
result.Xor((OpenBitSet)dis);
break;
default:
DoChain(result, DEFAULT, dis);
break;
}
}
else
{
DocIdSetIterator disi;
if (dis == null)
{
disi = DocIdSet.EMPTY_DOCIDSET.Iterator();
}
else
{
disi = dis.Iterator();
if (disi == null)
{
disi = DocIdSet.EMPTY_DOCIDSET.Iterator();
}
}
switch (logic)
{
case Logic.OR:
result.InPlaceOr(disi);
break;
case Logic.AND:
result.InPlaceAnd(disi);
break;
case Logic.ANDNOT:
result.InPlaceNot(disi);
break;
case Logic.XOR:
result.InPlaceXor(disi);
break;
default:
DoChain(result, DEFAULT, dis);
break;
}
}
}