public override DocsAndPositionsEnum DocsAndPositions(FieldInfo field, BlockTermState _termState, Bits liveDocs, DocsAndPositionsEnum reuse, int flags) { var termState = (PulsingTermState)_termState; if (termState.PostingsSize != -1) { PulsingDocsAndPositionsEnum postings; if (reuse is PulsingDocsAndPositionsEnum) { postings = (PulsingDocsAndPositionsEnum)reuse; if (!postings.CanReuse(field)) { postings = new PulsingDocsAndPositionsEnum(field); } } else { // the 'reuse' is actually the wrapped enum var previous = (PulsingDocsAndPositionsEnum)GetOther(reuse); if (previous != null && previous.CanReuse(field)) { postings = previous; } else { postings = new PulsingDocsAndPositionsEnum(field); } } if (reuse != postings) { SetOther(postings, reuse); // postings.other = reuse } return(postings.Reset(liveDocs, termState)); } if (!(reuse is PulsingDocsAndPositionsEnum)) { return(_wrappedPostingsReader.DocsAndPositions(field, termState.WrappedTermState, liveDocs, reuse, flags)); } var wrapped = _wrappedPostingsReader.DocsAndPositions(field, termState.WrappedTermState, liveDocs, (DocsAndPositionsEnum)GetOther(reuse), flags); SetOther(wrapped, reuse); // wrapped.other = reuse return(wrapped); }
public override DocsAndPositionsEnum DocsAndPositions(FieldInfo field, BlockTermState _termState, Bits liveDocs, DocsAndPositionsEnum reuse, int flags) { PulsingTermState termState = (PulsingTermState) _termState; if (termState.PostingsSize != -1) { PulsingDocsAndPositionsEnum postings; if (reuse is PulsingDocsAndPositionsEnum) { postings = (PulsingDocsAndPositionsEnum) reuse; if (!postings.CanReuse(field)) { postings = new PulsingDocsAndPositionsEnum(field); } } else { // the 'reuse' is actually the wrapped enum PulsingDocsAndPositionsEnum previous = (PulsingDocsAndPositionsEnum) GetOther(reuse); if (previous != null && previous.CanReuse(field)) { postings = previous; } else { postings = new PulsingDocsAndPositionsEnum(field); } } if (reuse != postings) { SetOther(postings, reuse); // postings.other = reuse } return postings.reset(liveDocs, termState); } else { if (reuse is PulsingDocsAndPositionsEnum) { DocsAndPositionsEnum wrapped = _wrappedPostingsReader.DocsAndPositions(field, termState.WrappedTermState, liveDocs, (DocsAndPositionsEnum) GetOther(reuse), flags); SetOther(wrapped, reuse); // wrapped.other = reuse return wrapped; } else { return _wrappedPostingsReader.DocsAndPositions(field, termState.WrappedTermState, liveDocs, reuse, flags); } } }