private void doChain(OpenBitSetDISI result, int logic, DocIdSet dis) { if (dis is OpenBitSet) { // optimized case for OpenBitSets switch (logic) { case OR: result.Or((OpenBitSet)dis); break; case AND: result.And((OpenBitSet)dis); break; case ANDNOT: result.AndNot((OpenBitSet)dis); break; case 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 OR: result.InPlaceOr(disi); break; case AND: result.InPlaceAnd(disi); break; case ANDNOT: result.InPlaceNot(disi); break; case XOR: result.InPlaceXor(disi); break; default: doChain(result, DEFAULT, dis); break; } } }