blob: 64d11470b5d84725f84a738dddd97c74e36f8c42 [file] [log] [blame]
diff -ur lucene-2.4.0/src/java/org/apache/lucene/search/CachingWrapperFilter.java lucene-2.4.0-patch/src/java/org/apache/lucene/search/CachingWrapperFilter.java
--- lucene-2.4.0/src/java/org/apache/lucene/search/CachingWrapperFilter.java 2008-10-01 04:58:30.000000000 -0700
+++ lucene-2.4.0-patch/src/java/org/apache/lucene/search/CachingWrapperFilter.java 2008-11-17 13:52:07.827185468 -0800
@@ -18,6 +18,7 @@
*/
import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.util.DocIdBitSet;
import java.util.BitSet;
import java.util.WeakHashMap;
import java.util.Map;
@@ -51,12 +52,19 @@
cache = new WeakHashMap();
}
+ Object cached = null;
synchronized (cache) { // check cache
- BitSet cached = (BitSet) cache.get(reader);
- if (cached != null) {
- return cached;
- }
- }
+ cached = cache.get(reader);
+ }
+
+ if (cached == null) {
+ // fallthrough
+ } else if (cached instanceof BitSet) {
+ return (BitSet)cached;
+ } else if (cached instanceof DocIdBitSet) {
+ return ((DocIdBitSet)cached).getBitSet();
+ }
+ // It would be nice to handle the DocIdSet case, but that's not really possible
final BitSet bits = filter.bits(reader);
@@ -72,11 +80,15 @@
cache = new WeakHashMap();
}
+ Object cached = null;
synchronized (cache) { // check cache
- DocIdSet cached = (DocIdSet) cache.get(reader);
- if (cached != null) {
- return cached;
- }
+ cached = cache.get(reader);
+ }
+ if (cached != null) {
+ if (cached instanceof DocIdSet)
+ return (DocIdSet)cached;
+ else
+ return new DocIdBitSet((BitSet)cached);
}
final DocIdSet docIdSet = filter.getDocIdSet(reader);