package org.apache.lucene.util; /** * Copyright 2005 Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Skips along two docNrSkipper sets which have common entries * @author maharwood */ public class AndDocNrSkipper implements DocNrSkipper { DocNrSkipper listA,listB; int aDoc=Integer.MIN_VALUE; int bDoc=Integer.MIN_VALUE; int lastDocNrLookup=Integer.MIN_VALUE; public AndDocNrSkipper(DocNrSkipper listA,DocNrSkipper listB) { this.listA=listA; this.listB=listB; } public int nextDocNr(int docNr) { if(lastDocNrLookup>docNr) { //user has rewinded position - need to reset position on both lists aDoc=listA.nextDocNr(docNr); //reset A bDoc=listB.nextDocNr(docNr); //reset B } lastDocNrLookup=docNr; int jumpTo=docNr; while(true) { //jump forward if(aDocbDoc) { jumpTo=aDoc; bDoc=listB.nextDocNr(aDoc); //advance B to A's current position } else { jumpTo=bDoc; aDoc=listA.nextDocNr(bDoc); //advance A to B's current position } } } }