private OpenBitSetDISI InitialResult(IndexReader reader, Logic logic, int[] index)
{
OpenBitSetDISI result;
/**
* First AND operation takes place against a completely false
* bitset and will always return zero results.
*/
if (logic == Logic.AND)
{
result = new OpenBitSetDISI(GetDISI(chain[index[0]], reader), reader.MaxDoc());
++index[0];
}
else if (logic == Logic.ANDNOT)
{
result = new OpenBitSetDISI(GetDISI(chain[index[0]], reader), reader.MaxDoc());
result.Flip(0, reader.MaxDoc()); // NOTE: may set bits for deleted docs.
++index[0];
}
else
{
result = new OpenBitSetDISI(reader.MaxDoc());
}
return result;
}