Return-Path: Delivered-To: apmail-jakarta-lucene-dev-archive@apache.org Received: (qmail 71331 invoked from network); 15 May 2002 23:34:44 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 15 May 2002 23:34:44 -0000 Received: (qmail 21736 invoked by uid 97); 15 May 2002 23:34:49 -0000 Delivered-To: qmlist-jakarta-archive-lucene-dev@jakarta.apache.org Received: (qmail 21706 invoked by uid 97); 15 May 2002 23:34:49 -0000 Mailing-List: contact lucene-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Lucene Developers List" Reply-To: "Lucene Developers List" Delivered-To: mailing list lucene-dev@jakarta.apache.org Received: (qmail 6820 invoked by uid 98); 15 May 2002 21:55:10 -0000 X-Antivirus: nagoya (v4198 created Apr 24 2002) Message-ID: From: Anders Nielsen Reply-To: Lucene Developers List To: "'lucene-dev@jakarta.apache.org '" Subject: RE: PhrasePrefixQuery.java and MultipleTermPositions.java Date: Wed, 15 May 2002 23:54:59 +0200 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2653.19) List-Subscribe: Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C1FC5B.289DD3A0" X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N ------_=_NextPart_000_01C1FC5B.289DD3A0 Content-Type: text/plain; charset="iso-8859-1" Here's an updated version of MultipleTermPositions.java. In this version next() uses adjustTop() instead of pop()-push() as per Doug's suggestion. And instead of a SortedSet for keeping positions, it keeps them in a class that reuses an int[]. regards, Anders Nielsen ------_=_NextPart_000_01C1FC5B.289DD3A0 Content-Type: application/octet-stream; name="MultipleTermPositions.java" Content-Disposition: attachment; filename="MultipleTermPositions.java" package org.apache.lucene.index; import java.io.IOException; import java.util.Arrays; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.apache.lucene.util.PriorityQueue; public class MultipleTermPositions implements TermPositions { private final static class TermPositionsQueue extends PriorityQueue { TermPositionsQueue(List termPositions) throws IOException { initialize(termPositions.size()); Iterator i = termPositions.iterator(); while (i.hasNext()) { TermPositions tp = (TermPositions)i.next(); if (tp.next()) put(tp); } } final TermPositions peek() { return (TermPositions)top(); } public final boolean lessThan(Object a, Object b) { return ((TermPositions)a).doc() < ((TermPositions)b).doc(); } } private final static class IntQueue { private int _arraySize = 16; private int _index = 0; private int _lastIndex = 0; private int[] _array = new int[_arraySize]; final void add(int i) { if (_lastIndex == _arraySize) growArray(); _array[_lastIndex++] = i; } final int next() { return _array[_index++]; } final void sort() { Arrays.sort(_array, _index, _lastIndex); } final void clear() { _index = 0; _lastIndex = 0; } final int size() { return (_lastIndex-_index); } private void growArray() { int[] newArray = new int[_arraySize*2]; System.arraycopy(_array, 0, newArray, 0, _arraySize); _array = newArray; _arraySize *= 2; } } private int _doc; private int _freq; private TermPositionsQueue _termPositionsQueue; private IntQueue _posList; public MultipleTermPositions(IndexReader indexReader, Term[] terms) throws IOException { List termPositions = new LinkedList(); for (int i=0;i 0 && _termPositionsQueue.peek().doc() == _doc); _posList.sort(); _freq = _posList.size(); return true; } /** * @see TermPositions#nextPosition() */ public final int nextPosition() throws IOException { return _posList.next(); } /** * @see TermDocs#skipTo(int) */ public final boolean skipTo(int target) throws IOException { while (target > _termPositionsQueue.peek().doc()) { TermPositions tp = (TermPositions)_termPositionsQueue.pop(); if (tp.skipTo(target)) _termPositionsQueue.put(tp); else tp.close(); } return next(); } /** * @see TermDocs#doc() */ public final int doc() { return _doc; } /** * @see TermDocs#freq() */ public final int freq() { return _freq; } /** * @see TermDocs#close() */ public final void close() throws IOException { while (_termPositionsQueue.size() > 0) ((TermPositions)_termPositionsQueue.pop()).close(); } /** * @see TermDocs#seek(Term) */ public void seek(Term arg0) throws IOException { throw new UnsupportedOperationException(); } /** * @see TermDocs#read(int[], int[]) */ public int read(int[] arg0, int[] arg1) throws IOException { throw new UnsupportedOperationException(); } } ------_=_NextPart_000_01C1FC5B.289DD3A0 Content-Type: text/plain; charset=us-ascii -- To unsubscribe, e-mail: For additional commands, e-mail: ------_=_NextPart_000_01C1FC5B.289DD3A0--