Comments?
Doug
Index: src/java/org/apache/lucene/search/FieldCache.java
===================================================================
--- src/java/org/apache/lucene/search/FieldCache.java (revision 169506)
+++ src/java/org/apache/lucene/search/FieldCache.java (working copy)
@@ -52,7 +52,23 @@
}
}
+ /** Interface to parse ints from document fields.
+ * @see #getInts(IndexReader,String,IntParser)
+ */
+ public interface IntParser {
+ /** Return an integer representation of this field's value. */
+ public int parseInt(String string);
+ }
+
+ /** Interface to parse floats from document fields.
+ * @see #getFloats(IndexReader,String,FloatParser)
+ */
+ public interface FloatParser {
+ /** Return an float representation of this field's value. */
+ public float parseFloat(String string);
+ }
+
/** Expert: The cache used internally by sorting and range query classes. */
public static FieldCache DEFAULT = new FieldCacheImpl();
@@ -69,6 +85,19 @@
public int[] getInts (IndexReader reader, String field)
throws IOException;
+ /** Checks the internal cache for an appropriate entry, and if none is found,
+ * reads the terms in <code>field</code> as integers and returns an array of
+ * size <code>reader.maxDoc()</code> of the value each document has in the
+ * given field.
+ * @param reader Used to get field values.
+ * @param field Which field contains the integers.
+ * @param parser Computes integer for string values.
+ * @return The values in the given field for each document.
+ * @throws IOException If any error occurs.
+ */
+ public int[] getInts (IndexReader reader, String field, IntParser parser)
+ throws IOException;
+
/** Checks the internal cache for an appropriate entry, and if
* none is found, reads the terms in <code>field</code> as floats and returns an array
* of size <code>reader.maxDoc()</code> of the value each document
@@ -81,6 +110,19 @@
public float[] getFloats (IndexReader reader, String field)
throws IOException;
+ /** Checks the internal cache for an appropriate entry, and if
+ * none is found, reads the terms in <code>field</code> as floats and returns an array
+ * of size <code>reader.maxDoc()</code> of the value each document
+ * has in the given field.
+ * @param reader Used to get field values.
+ * @param field Which field contains the floats.
+ * @param parser Computes float for string values.
+ * @return The values in the given field for each document.
+ * @throws IOException If any error occurs.
+ */
+ public float[] getFloats (IndexReader reader, String field,
+ FloatParser parser) throws IOException;
+
/** Checks the internal cache for an appropriate entry, and if none
* is found, reads the term values in <code>field</code> and returns an array
* of size <code>reader.maxDoc()</code> containing the value each document
Index: src/java/org/apache/lucene/search/FieldCacheImpl.java
===================================================================
--- src/java/org/apache/lucene/search/FieldCacheImpl.java (revision 169506)
+++ src/java/org/apache/lucene/search/FieldCacheImpl.java (working copy)
@@ -81,7 +81,18 @@
}
}
+ private static final IntParser INT_PARSER = new IntParser() {
+ public int parseInt(String value) {
+ return Integer.parseInt(value);
+ }
+ };
+ private static final FloatParser FLOAT_PARSER = new FloatParser() {
+ public float parseFloat(String value) {
+ return Float.parseFloat(value);
+ }
+ };
+
/** The internal cache. Maps Entry to array of interpreted term values. **/
final Map cache = new WeakHashMap();
@@ -132,10 +143,15 @@
}
// inherit javadocs
- public int[] getInts (IndexReader reader, String field)
+ public int[] getInts (IndexReader reader, String field) throws IOException {
+ return getInts(reader, field, INT_PARSER);
+ }
+
+ // inherit javadocs
+ public int[] getInts (IndexReader reader, String field, IntParser parser)
throws IOException {
field = field.intern();
- Object ret = lookup (reader, field, SortField.INT);
+ Object ret = lookup (reader, field, parser);
if (ret == null) {
final int[] retArray = new int[reader.maxDoc()];
if (retArray.length > 0) {
@@ -159,7 +175,7 @@
termEnum.close();
}
}
- store (reader, field, SortField.INT, retArray);
+ store (reader, field, parser, retArray);
return retArray;
}
return (int[]) ret;
@@ -167,9 +183,15 @@
// inherit javadocs
public float[] getFloats (IndexReader reader, String field)
- throws IOException {
+ throws IOException {
+ return getFloats(reader, field, FLOAT_PARSER);
+ }
+
+ // inherit javadocs
+ public float[] getFloats (IndexReader reader, String field,
+ FloatParser parser) throws IOException {
field = field.intern();
- Object ret = lookup (reader, field, SortField.FLOAT);
+ Object ret = lookup (reader, field, parser);
if (ret == null) {
final float[] retArray = new float[reader.maxDoc()];
if (retArray.length > 0) {
@@ -193,7 +215,7 @@
termEnum.close();
}
}
- store (reader, field, SortField.FLOAT, retArray);
+ store (reader, field, parser, retArray);
return retArray;
}
return (float[]) ret;
@@ -388,7 +410,7 @@
termEnum.close();
}
}
- store (reader, field, SortField.CUSTOM, retArray);
+ store (reader, field, comparator, retArray);
return retArray;
}
return (Comparable[]) ret;--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
