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:16:25 UTC
svn commit: r1374713 - in /lucene/dev/trunk/lucene:
core/src/java/org/apache/lucene/index/Fields.java
core/src/java/org/apache/lucene/util/FilterIterator.java
test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java
Author: uschindler
Date: Sun Aug 19 09:16:24 2012
New Revision: 1374713
URL: http://svn.apache.org/viewvc?rev=1374713&view=rev
Log:
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/trunk/lucene/core/src/java/org/apache/lucene/util/FilterIterator.java
- copied, changed from r1374710, lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/FilterIterator.java
Modified:
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/Fields.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/Fields.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/Fields.java?rev=1374713&r1=1374712&r2=1374713&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/Fields.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/Fields.java Sun Aug 19 09:16:24 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
Copied: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/FilterIterator.java (from r1374710, lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/FilterIterator.java)
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/FilterIterator.java?p2=lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/FilterIterator.java&p1=lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/FilterIterator.java&r1=1374710&r2=1374713&rev=1374713&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/lucene/core/src/java/org/apache/lucene/util/FilterIterator.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/FilterIterator.java Sun Aug 19 09:16:24 2012
@@ -20,12 +20,17 @@ import java.util.NoSuchElementException;
* the License.
*/
+/**
+ * An {@link Iterator} implementation that filters elements with a boolean predicate.
+ * @see #predicateFunction
+ */
public abstract class FilterIterator<T> implements Iterator<T> {
private final Iterator<T> iterator;
private T next = null;
private boolean nextIsSet = false;
+ /** returns true, if this element should be returned by {@link next()}. */
protected abstract boolean predicateFunction(T object);
public FilterIterator(Iterator<T> baseIterator) {
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java?rev=1374713&r1=1374712&r2=1374713&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java Sun Aug 19 09:16:24 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);
}
};
}