tjones      2004/03/29 10:55:30

  Modified:    src/java/org/apache/lucene/search FloatSortedHitQueue.java
                        IntegerSortedHitQueue.java
                        StringSortedHitQueue.java
  Log:
  streamlined by removing duplicated code
  
  Revision  Changes    Path
  1.4       +3 -62     
jakarta-lucene/src/java/org/apache/lucene/search/FloatSortedHitQueue.java
  
  Index: FloatSortedHitQueue.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/FloatSortedHitQueue.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FloatSortedHitQueue.java  24 Mar 2004 19:23:11 -0000      1.3
  +++ FloatSortedHitQueue.java  29 Mar 2004 18:55:30 -0000      1.4
  @@ -72,67 +72,8 @@
         */
        static ScoreDocLookupComparator comparator (final IndexReader reader, final 
String fieldname)
        throws IOException {
  -             final String field = fieldname.intern();
  -             return new ScoreDocLookupComparator () {
  -
  -                     protected final float[] fieldOrder = generateSortIndex();
  -
  -                     protected final float[] generateSortIndex()
  -                     throws IOException {
  -
  -                             float[] retArray = new float[reader.maxDoc()];
  -                             if (retArray.length > 0) {
  -                                     TermEnum enumerator = reader.terms (new Term 
(field, ""));
  -                                     TermDocs termDocs = reader.termDocs();
  -                                     try {
  -                                             if (enumerator.term() == null) {
  -                                                     throw new RuntimeException 
("no terms in field " + field);
  -                                             }
  -                                             do {
  -                                                     Term term = enumerator.term();
  -                                                     if (term.field() != field) 
break;
  -                                                     float termval = 
Float.parseFloat (term.text());
  -                                                     termDocs.seek (enumerator);
  -                                                     while (termDocs.next()) {
  -                                                             
retArray[termDocs.doc()] = termval;
  -                                                     }
  -                                             } while (enumerator.next());
  -                                     } finally {
  -                                             enumerator.close();
  -                                             termDocs.close();
  -                                     }
  -                             }
  -                             return retArray;
  -                     }
  -
  -                     public final int compare (final ScoreDoc i, final ScoreDoc j) {
  -                             final float fi = fieldOrder[i.doc];
  -                             final float fj = fieldOrder[j.doc];
  -                             if (fi < fj) return -1;
  -                             if (fi > fj) return 1;
  -                             return 0;
  -                     }
  -
  -                     public final int compareReverse (final ScoreDoc i, final 
ScoreDoc j) {
  -                             final float fi = fieldOrder[i.doc];
  -                             final float fj = fieldOrder[j.doc];
  -                             if (fi > fj) return -1;
  -                             if (fi < fj) return 1;
  -                             return 0;
  -                     }
  -
  -                     public final boolean sizeMatches (final int n) {
  -                             return fieldOrder.length == n;
  -                     }
  -
  -                     public Object sortValue (final ScoreDoc i) {
  -                             return new Float (fieldOrder[i.doc]);
  -                     }
  -
  -                     public int sortType() {
  -                             return SortField.FLOAT;
  -                     }
  -             };
  +             TermEnum enumerator = reader.terms (new Term (fieldname, ""));
  +             return comparator (reader, enumerator, fieldname);
        }
   
   
  
  
  
  1.4       +3 -63     
jakarta-lucene/src/java/org/apache/lucene/search/IntegerSortedHitQueue.java
  
  Index: IntegerSortedHitQueue.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/IntegerSortedHitQueue.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- IntegerSortedHitQueue.java        24 Mar 2004 19:23:11 -0000      1.3
  +++ IntegerSortedHitQueue.java        29 Mar 2004 18:55:30 -0000      1.4
  @@ -73,68 +73,8 @@
         */
        static ScoreDocLookupComparator comparator (final IndexReader reader, final 
String fieldname)
        throws IOException {
  -             final String field = fieldname.intern();
  -             return new ScoreDocLookupComparator() {
  -
  -                     /** The sort information being used by this instance */
  -                     protected final int[] fieldOrder = generateSortIndex();
  -
  -                     private final int[] generateSortIndex()
  -                     throws IOException {
  -
  -                             final int[] retArray = new int[reader.maxDoc()];
  -                             if (retArray.length > 0) {
  -                                     TermEnum enumerator = reader.terms (new Term 
(field, ""));
  -                                     TermDocs termDocs = reader.termDocs();
  -                                     try {
  -                                             if (enumerator.term() == null) {
  -                                                     throw new RuntimeException 
("no terms in field "+field);
  -                                             }
  -                                             do {
  -                                                     Term term = enumerator.term();
  -                                                     if (term.field() != field) 
break;
  -                                                     int termval = Integer.parseInt 
(term.text());
  -                                                     termDocs.seek (enumerator);
  -                                                     while (termDocs.next()) {
  -                                                             
retArray[termDocs.doc()] = termval;
  -                                                     }
  -                                             } while (enumerator.next());
  -                                     } finally {
  -                                             enumerator.close();
  -                                             termDocs.close();
  -                                     }
  -                             }
  -                             return retArray;
  -                     }
  -
  -                     public final int compare (final ScoreDoc i, final ScoreDoc j) {
  -                             final int fi = fieldOrder[i.doc];
  -                             final int fj = fieldOrder[j.doc];
  -                             if (fi < fj) return -1;
  -                             if (fi > fj) return 1;
  -                             return 0;
  -                     }
  -
  -                     public final int compareReverse (final ScoreDoc i, final 
ScoreDoc j) {
  -                             final int fi = fieldOrder[i.doc];
  -                             final int fj = fieldOrder[j.doc];
  -                             if (fi > fj) return -1;
  -                             if (fi < fj) return 1;
  -                             return 0;
  -                     }
  -
  -                     public final boolean sizeMatches (final int n) {
  -                             return fieldOrder.length == n;
  -                     }
  -
  -                     public Object sortValue (final ScoreDoc i) {
  -                             return new Integer (fieldOrder[i.doc]);
  -                     }
  -
  -                     public int sortType() {
  -                             return SortField.INT;
  -                     }
  -             };
  +             TermEnum enumerator = reader.terms (new Term (fieldname, ""));
  +             return comparator (reader, enumerator, fieldname);
        }
   
   
  
  
  
  1.5       +3 -97     
jakarta-lucene/src/java/org/apache/lucene/search/StringSortedHitQueue.java
  
  Index: StringSortedHitQueue.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/StringSortedHitQueue.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- StringSortedHitQueue.java 24 Mar 2004 19:23:11 -0000      1.4
  +++ StringSortedHitQueue.java 29 Mar 2004 18:55:30 -0000      1.5
  @@ -75,102 +75,8 @@
         */
        static ScoreDocLookupComparator comparator (final IndexReader reader, final 
String fieldname)
        throws IOException {
  -             final String field = fieldname.intern();
  -             return new ScoreDocLookupComparator() {
  -
  -                     /** The sort information being used by this instance */
  -                     protected final int[] fieldOrder = generateSortIndex();
  -                     protected String[] terms;
  -
  -                     private final int[] generateSortIndex()
  -                     throws IOException {
  -
  -                             final int[] retArray = new int[reader.maxDoc()];
  -                             final String[] mterms = new String[reader.maxDoc()];   
// guess length
  -                             if (retArray.length > 0) {
  -                                     TermEnum enumerator = reader.terms (new Term 
(field, ""));
  -                                     TermDocs termDocs = reader.termDocs();
  -
  -                                     int t = 0;  // current term number
  -                                     try {
  -                                             if (enumerator.term() == null) {
  -                                                     throw new RuntimeException 
("no terms in field " + field);
  -                                             }
  -
  -                                             // NOTE: the contract for TermEnum 
says the
  -                                             // terms will be in natural order 
(which is
  -                                             // ordering by field name, term text). 
 The
  -                                             // contract for TermDocs says the docs 
will
  -                                             // be ordered by document number.  So 
the
  -                                             // following loop will automatically 
sort the
  -                                             // terms in the correct order.
  -
  -                                             // if a given document has more than 
one term
  -                                             // in the field, only the last one 
will be used.
  -
  -                                             do {
  -                                                     Term term = enumerator.term();
  -                                                     if (term.field() != field) 
break;
  -
  -                                                     // store term text
  -                                                     // we expect that there is at 
most one term per document
  -                                                     if (t >= mterms.length) throw 
new RuntimeException ("there are more terms than documents in field \""+field+"\"");
  -                                                     mterms[t] = term.text();
  -
  -                                                     // store which documents use 
this term
  -                                                     termDocs.seek (enumerator);
  -                                                     while (termDocs.next()) {
  -                                                             
retArray[termDocs.doc()] = t;
  -                                                     }
  -
  -                                                     t++;
  -                                             } while (enumerator.next());
  -
  -                                     } finally {
  -                                             enumerator.close();
  -                                             termDocs.close();
  -                                     }
  -
  -                                     // if there are less terms than documents,
  -                                     // trim off the dead array space
  -                                     if (t < mterms.length) {
  -                                             terms = new String[t];
  -                                             System.arraycopy (mterms, 0, terms, 0, 
t);
  -                                     } else {
  -                                             terms = mterms;
  -                                     }
  -                             }
  -                             return retArray;
  -                     }
  -
  -                     public final int compare (final ScoreDoc i, final ScoreDoc j) {
  -                             final int fi = fieldOrder[i.doc];
  -                             final int fj = fieldOrder[j.doc];
  -                             if (fi < fj) return -1;
  -                             if (fi > fj) return 1;
  -                             return 0;
  -                     }
  -
  -                     public final int compareReverse (final ScoreDoc i, final 
ScoreDoc j) {
  -                             final int fi = fieldOrder[i.doc];
  -                             final int fj = fieldOrder[j.doc];
  -                             if (fi > fj) return -1;
  -                             if (fi < fj) return 1;
  -                             return 0;
  -                     }
  -
  -                     public final boolean sizeMatches (final int n) {
  -                             return fieldOrder.length == n;
  -                     }
  -
  -                     public Object sortValue (final ScoreDoc i) {
  -                             return terms[fieldOrder[i.doc]];
  -                     }
  -
  -                     public int sortType() {
  -                             return SortField.STRING;
  -                     }
  -             };
  +             TermEnum enumerator = reader.terms (new Term (fieldname, ""));
  +             return comparator (reader, enumerator, fieldname);
        }
   
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to