public override bool SkipTo(int target) { if (moreInclude) // skip include { moreInclude = includeSpans.SkipTo(target); } if (!moreInclude) { return(false); } if (moreExclude && includeSpans.Doc > excludeSpans.Doc) // skip exclude { moreExclude = excludeSpans.SkipTo(includeSpans.Doc); } while (moreExclude && includeSpans.Doc == excludeSpans.Doc && excludeSpans.End <= includeSpans.Start - outerInstance.pre) // while exclude is before { moreExclude = excludeSpans.MoveNext(); // increment exclude } if (!moreExclude || includeSpans.Doc != excludeSpans.Doc || includeSpans.End + outerInstance.post <= excludeSpans.Start) // if no intersection { return(true); // we found a match } return(MoveNext()); // scan to next match }
public override bool SkipTo(int target) { if (queue == null) { return(InitSpanQueue(target)); } bool skipCalled = false; while (queue.Count != 0 && Top.Doc < target) { if (Top.SkipTo(target)) { queue.UpdateTop(); } else { queue.Pop(); } skipCalled = true; } if (skipCalled) { return(queue.Count != 0); } return(MoveNext()); }
private bool InitSpanQueue(int target) { queue = new SpanQueue(outerInstance, outerInstance.clauses.Count); foreach (var clause in outerInstance.clauses) { Spans spans = clause.GetSpans(context, acceptDocs, termContexts); cost += spans.GetCost(); if (((target == -1) && spans.Next()) || ((target != -1) && spans.SkipTo(target))) { queue.Add(spans); } } return(queue.Count != 0); }
public override int Advance(int target) { if (!m_more) { return(m_doc = NO_MORE_DOCS); } if (m_spans.Doc < target) // setFreqCurrentDoc() leaves spans.doc() ahead { m_more = m_spans.SkipTo(target); } if (!SetFreqCurrentDoc()) { m_doc = NO_MORE_DOCS; } return(m_doc); }
public override bool SkipTo(int target) { return(Adjust(spans.SkipTo(target))); }