You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2012/08/19 11:17:42 UTC

svn commit: r1374714 - in /lucene/dev/branches/branch_4x: ./ lucene/ lucene/core/ lucene/core/src/java/org/apache/lucene/index/ lucene/core/src/java/org/apache/lucene/util/ lucene/test-framework/ lucene/test-framework/src/java/org/apache/lucene/index/

Author: uschindler
Date: Sun Aug 19 09:17:42 2012
New Revision: 1374714

URL: http://svn.apache.org/viewvc?rev=1374714&view=rev
Log:
Merged revision(s) 1374713 from lucene/dev/trunk:
Fix javadocs of Fields.size(), use FilteredIterator from StoredFields branch. Return -1 for Fields.size() in FieldFilterAtomicReader. If this breaks some test, we found a bug and have to change test to respect -1 (which is valid return value)

Added:
    lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/util/FilterIterator.java
      - copied unchanged from r1374713, lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/FilterIterator.java
Modified:
    lucene/dev/branches/branch_4x/   (props changed)
    lucene/dev/branches/branch_4x/lucene/   (props changed)
    lucene/dev/branches/branch_4x/lucene/core/   (props changed)
    lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/Fields.java
    lucene/dev/branches/branch_4x/lucene/test-framework/   (props changed)
    lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java

Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/Fields.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/Fields.java?rev=1374714&r1=1374713&r2=1374714&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/Fields.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/Fields.java Sun Aug 19 09:17:42 2012
@@ -33,10 +33,9 @@ public abstract class Fields implements 
    *  null if the field does not exist. */
   public abstract Terms terms(String field) throws IOException;
 
-  /** Returns the number of terms for all fields, or -1 if this 
-   *  measure isn't stored by the codec. Note that, just like 
-   *  other term measures, this measure does not take deleted 
-   *  documents into account. */
+  /** Returns the number of fields or -1 if the number of
+   * distinct field names is unknown. If >= 0,
+   * {@link #iterator} will return as many field names. */
   public abstract int size() throws IOException;
   
   /** Returns the number of terms for all fields, or -1 if this 

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java?rev=1374714&r1=1374713&r2=1374714&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java Sun Aug 19 09:17:42 2012
@@ -20,9 +20,10 @@ package org.apache.lucene.index;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.NoSuchElementException;
 import java.util.Set;
 
+import org.apache.lucene.util.FilterIterator;
+
 /**
  * A {@link FilterAtomicReader} that exposes only a subset
  * of fields from the underlying wrapped reader.
@@ -139,56 +140,16 @@ public final class FieldFilterAtomicRead
 
     @Override
     public int size() {
-      // TODO: add faster implementation!
-      int c = 0;
-      final Iterator<String> it = iterator();
-      while (it.hasNext()) {
-        it.next();
-        c++;
-      }
-      return c;
+      // this information is not cheap, return -1 like MultiFields does:
+      return -1;
     }
 
     @Override
     public Iterator<String> iterator() {
-      final Iterator<String> in = super.iterator();
-      return new Iterator<String>() {
-        private String cached = null;
-        
-        @Override
-        public String next() {
-          if (cached != null) {
-            String next = cached;
-            cached = null;
-            return next;
-          } else {
-            String next = doNext();
-            if (next == null) {
-              throw new NoSuchElementException();
-            } else {
-              return next;
-            }
-          }
-        }
-
-        @Override
-        public boolean hasNext() {
-          return cached != null || (cached = doNext()) != null;
-        }
-        
-        private String doNext() {
-          while (in.hasNext()) {
-            String field = in.next();
-            if (hasField(field)) {
-              return field;
-            }
-          }
-          return null;
-        }
-
+      return new FilterIterator<String>(super.iterator()) {
         @Override
-        public void remove() {
-          throw new UnsupportedOperationException();
+        protected boolean predicateFunction(String field) {
+          return hasField(field);
         }
       };
     }