public DocumentFilteredAtomicIndexReader(AtomicReaderContext context, Filter preserveFilter, bool negateFilter) : base(context.AtomicReader) { int maxDoc = @in.MaxDoc; FixedBitSet bits = new FixedBitSet(maxDoc); // ignore livedocs here, as we filter them later: DocIdSet docs = preserveFilter.GetDocIdSet(context, null); if (docs != null) { DocIdSetIterator it = docs.GetIterator(); if (it != null) { bits.Or(it); } } if (negateFilter) { bits.Flip(0, maxDoc); } if (@in.HasDeletions) { Bits oldLiveDocs = @in.LiveDocs; Debug.Assert(oldLiveDocs != null); DocIdSetIterator it = bits.GetIterator(); for (int i = it.NextDoc(); i < maxDoc; i = it.NextDoc()) { if (!oldLiveDocs.Get(i)) { // we can safely modify the current bit, as the iterator already stepped over it: bits.Clear(i); } } } this.liveDocs = bits; this.numDocs_Renamed = bits.Cardinality(); }
internal SVInOrderScorer(TermsIncludingScoreQuery outerInstance, Weight weight, Bits acceptDocs, TermsEnum termsEnum, int maxDoc, long cost) : base(weight) { this.outerInstance = outerInstance; FixedBitSet matchingDocs = new FixedBitSet(maxDoc); scores = new float[maxDoc]; FillDocsAndScores(matchingDocs, acceptDocs, termsEnum); matchingDocsIterator = matchingDocs.GetIterator(); cost_Renamed = cost; }