mirror of https://github.com/apache/lucene.git
LUCENE-3502: move .has/getArray into PackedInts.Reader and make the direct impls package private
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1181070 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
3088c013ae
commit
9e027695c8
|
@ -26,9 +26,6 @@ import org.apache.lucene.search.cache.*;
|
|||
import org.apache.lucene.search.cache.CachedArray.*;
|
||||
import org.apache.lucene.util.Bits;
|
||||
import org.apache.lucene.util.BytesRef;
|
||||
import org.apache.lucene.util.packed.Direct16;
|
||||
import org.apache.lucene.util.packed.Direct32;
|
||||
import org.apache.lucene.util.packed.Direct8;
|
||||
import org.apache.lucene.util.packed.PackedInts;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -1222,14 +1219,21 @@ public abstract class FieldComparator<T> {
|
|||
final int docBase = context.docBase;
|
||||
termsIndex = FieldCache.DEFAULT.getTermsIndex(context.reader, field);
|
||||
final PackedInts.Reader docToOrd = termsIndex.getDocToOrd();
|
||||
FieldComparator perSegComp;
|
||||
if (docToOrd instanceof Direct8) {
|
||||
perSegComp = new ByteOrdComparator(((Direct8) docToOrd).getArray(), termsIndex, docBase);
|
||||
} else if (docToOrd instanceof Direct16) {
|
||||
perSegComp = new ShortOrdComparator(((Direct16) docToOrd).getArray(), termsIndex, docBase);
|
||||
} else if (docToOrd instanceof Direct32) {
|
||||
perSegComp = new IntOrdComparator(((Direct32) docToOrd).getArray(), termsIndex, docBase);
|
||||
} else {
|
||||
FieldComparator perSegComp = null;
|
||||
if (docToOrd.hasArray()) {
|
||||
final Object arr = docToOrd.getArray();
|
||||
if (arr instanceof byte[]) {
|
||||
perSegComp = new ByteOrdComparator((byte[]) arr, termsIndex, docBase);
|
||||
} else if (arr instanceof short[]) {
|
||||
perSegComp = new ShortOrdComparator((short[]) arr, termsIndex, docBase);
|
||||
} else if (arr instanceof int[]) {
|
||||
perSegComp = new IntOrdComparator((int[]) arr, termsIndex, docBase);
|
||||
}
|
||||
// Don't specialize the long[] case since it's not
|
||||
// possible, ie, worse case is MAX_INT-1 docs with
|
||||
// every one having a unique value.
|
||||
}
|
||||
if (perSegComp == null) {
|
||||
perSegComp = new AnyOrdComparator(docToOrd, termsIndex, docBase);
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ import java.util.Arrays;
|
|||
* @lucene.internal
|
||||
*/
|
||||
|
||||
public class Direct16 extends PackedInts.ReaderImpl
|
||||
class Direct16 extends PackedInts.ReaderImpl
|
||||
implements PackedInts.Mutable {
|
||||
private short[] values;
|
||||
private static final int BITS_PER_VALUE = 16;
|
||||
|
@ -68,10 +68,6 @@ public class Direct16 extends PackedInts.ReaderImpl
|
|||
this.values = values;
|
||||
}
|
||||
|
||||
public short[] getArray() {
|
||||
return values;
|
||||
}
|
||||
|
||||
public long get(final int index) {
|
||||
return 0xFFFFL & values[index];
|
||||
}
|
||||
|
@ -88,4 +84,14 @@ public class Direct16 extends PackedInts.ReaderImpl
|
|||
public void clear() {
|
||||
Arrays.fill(values, (short)0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getArray() {
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasArray() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ import java.util.Arrays;
|
|||
* @lucene.internal
|
||||
*/
|
||||
|
||||
public class Direct32 extends PackedInts.ReaderImpl
|
||||
class Direct32 extends PackedInts.ReaderImpl
|
||||
implements PackedInts.Mutable {
|
||||
private int[] values;
|
||||
private static final int BITS_PER_VALUE = 32;
|
||||
|
@ -64,10 +64,6 @@ public class Direct32 extends PackedInts.ReaderImpl
|
|||
this.values = values;
|
||||
}
|
||||
|
||||
public int[] getArray() {
|
||||
return values;
|
||||
}
|
||||
|
||||
public long get(final int index) {
|
||||
return 0xFFFFFFFFL & values[index];
|
||||
}
|
||||
|
@ -84,4 +80,14 @@ public class Direct32 extends PackedInts.ReaderImpl
|
|||
public void clear() {
|
||||
Arrays.fill(values, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getArray() {
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasArray() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ import java.util.Arrays;
|
|||
* @lucene.internal
|
||||
*/
|
||||
|
||||
public class Direct64 extends PackedInts.ReaderImpl
|
||||
class Direct64 extends PackedInts.ReaderImpl
|
||||
implements PackedInts.Mutable {
|
||||
private long[] values;
|
||||
private static final int BITS_PER_VALUE = 64;
|
||||
|
@ -48,10 +48,6 @@ public class Direct64 extends PackedInts.ReaderImpl
|
|||
this.values = values;
|
||||
}
|
||||
|
||||
public long[] getArray() {
|
||||
return values;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an array backed by the given values.
|
||||
* </p><p>
|
||||
|
@ -80,4 +76,14 @@ public class Direct64 extends PackedInts.ReaderImpl
|
|||
public void clear() {
|
||||
Arrays.fill(values, 0L);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long[] getArray() {
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasArray() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ import java.util.Arrays;
|
|||
* @lucene.internal
|
||||
*/
|
||||
|
||||
public class Direct8 extends PackedInts.ReaderImpl
|
||||
class Direct8 extends PackedInts.ReaderImpl
|
||||
implements PackedInts.Mutable {
|
||||
private byte[] values;
|
||||
private static final int BITS_PER_VALUE = 8;
|
||||
|
@ -69,10 +69,6 @@ public class Direct8 extends PackedInts.ReaderImpl
|
|||
this.values = values;
|
||||
}
|
||||
|
||||
public byte[] getArray() {
|
||||
return values;
|
||||
}
|
||||
|
||||
public long get(final int index) {
|
||||
return 0xFFL & values[index];
|
||||
}
|
||||
|
@ -88,4 +84,14 @@ public class Direct8 extends PackedInts.ReaderImpl
|
|||
public void clear() {
|
||||
Arrays.fill(values, (byte)0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getArray() {
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasArray() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,6 +60,16 @@ public class GrowableWriter implements PackedInts.Mutable {
|
|||
return current;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getArray() {
|
||||
return current.getArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasArray() {
|
||||
return current.hasArray();
|
||||
}
|
||||
|
||||
public void set(int index, long value) {
|
||||
if (value >= currentMaxValue) {
|
||||
int bpv = getBitsPerValue();
|
||||
|
|
|
@ -65,6 +65,25 @@ public class PackedInts {
|
|||
* @return the number of values.
|
||||
*/
|
||||
int size();
|
||||
|
||||
/**
|
||||
* Expert: if the bit-width of this reader matches one of
|
||||
* java's native types, returns the underlying array
|
||||
* (ie, byte[], short[], int[], long[]); else, returns
|
||||
* null. Note that when accessing the array you must
|
||||
* upgrade the type (bitwise AND with all ones), to
|
||||
* interpret the full value as unsigned. Ie,
|
||||
* bytes[idx]&0xFF, shorts[idx]&0xFFFF, etc.
|
||||
*/
|
||||
Object getArray();
|
||||
|
||||
/**
|
||||
* Returns true if this implementation is backed by a
|
||||
* native java array.
|
||||
*
|
||||
* @see #getArray
|
||||
*/
|
||||
boolean hasArray();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -137,6 +156,14 @@ public class PackedInts {
|
|||
public long getMaxValue() { // Convenience method
|
||||
return maxValue(bitsPerValue);
|
||||
}
|
||||
|
||||
public Object getArray() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean hasArray() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/** A write-once Writer.
|
||||
|
|
|
@ -28,9 +28,6 @@ import org.apache.lucene.util.PriorityQueue;
|
|||
import org.apache.lucene.util.BytesRef;
|
||||
import org.apache.lucene.util.ReaderUtil;
|
||||
import org.apache.lucene.util.UnicodeUtil;
|
||||
import org.apache.lucene.util.packed.Direct16;
|
||||
import org.apache.lucene.util.packed.Direct32;
|
||||
import org.apache.lucene.util.packed.Direct8;
|
||||
import org.apache.lucene.util.packed.PackedInts;
|
||||
import org.apache.solr.common.SolrException;
|
||||
import org.apache.solr.common.params.FacetParams;
|
||||
|
@ -268,8 +265,15 @@ class PerSegmentSingleValuedFaceting {
|
|||
PackedInts.Reader ordReader = si.getDocToOrd();
|
||||
int doc;
|
||||
|
||||
if (ordReader instanceof Direct32) {
|
||||
int[] ords = ((Direct32)ordReader).getArray();
|
||||
final Object arr;
|
||||
if (ordReader.hasArray()) {
|
||||
arr = ordReader.getArray();
|
||||
} else {
|
||||
arr = null;
|
||||
}
|
||||
|
||||
if (arr instanceof int[]) {
|
||||
int[] ords = (int[]) arr;
|
||||
if (prefix==null) {
|
||||
while ((doc = iter.nextDoc()) < DocIdSetIterator.NO_MORE_DOCS) {
|
||||
counts[ords[doc]]++;
|
||||
|
@ -281,8 +285,8 @@ class PerSegmentSingleValuedFaceting {
|
|||
if (arrIdx>=0 && arrIdx<nTerms) counts[arrIdx]++;
|
||||
}
|
||||
}
|
||||
} else if (ordReader instanceof Direct16) {
|
||||
short[] ords = ((Direct16)ordReader).getArray();
|
||||
} else if (arr instanceof short[]) {
|
||||
short[] ords = (short[]) arr;
|
||||
if (prefix==null) {
|
||||
while ((doc = iter.nextDoc()) < DocIdSetIterator.NO_MORE_DOCS) {
|
||||
counts[ords[doc] & 0xffff]++;
|
||||
|
@ -294,8 +298,8 @@ class PerSegmentSingleValuedFaceting {
|
|||
if (arrIdx>=0 && arrIdx<nTerms) counts[arrIdx]++;
|
||||
}
|
||||
}
|
||||
} else if (ordReader instanceof Direct8) {
|
||||
byte[] ords = ((Direct8)ordReader).getArray();
|
||||
} else if (arr instanceof byte[]) {
|
||||
byte[] ords = (byte[]) arr;
|
||||
if (prefix==null) {
|
||||
while ((doc = iter.nextDoc()) < DocIdSetIterator.NO_MORE_DOCS) {
|
||||
counts[ords[doc] & 0xff]++;
|
||||
|
@ -322,7 +326,6 @@ class PerSegmentSingleValuedFaceting {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,9 +22,6 @@ import org.apache.lucene.queryparser.classic.ParseException;
|
|||
import org.apache.lucene.search.*;
|
||||
import org.apache.lucene.search.grouping.AbstractAllGroupHeadsCollector;
|
||||
import org.apache.lucene.util.*;
|
||||
import org.apache.lucene.util.packed.Direct16;
|
||||
import org.apache.lucene.util.packed.Direct32;
|
||||
import org.apache.lucene.util.packed.Direct8;
|
||||
import org.apache.lucene.util.packed.PackedInts;
|
||||
import org.apache.solr.common.SolrException;
|
||||
import org.apache.solr.common.SolrException.ErrorCode;
|
||||
|
@ -450,8 +447,15 @@ public class SimpleFacets {
|
|||
DocIterator iter = docs.iterator();
|
||||
|
||||
PackedInts.Reader ordReader = si.getDocToOrd();
|
||||
if (ordReader instanceof Direct32) {
|
||||
int[] ords = ((Direct32)ordReader).getArray();
|
||||
final Object arr;
|
||||
if (ordReader.hasArray()) {
|
||||
arr = ordReader.getArray();
|
||||
} else {
|
||||
arr = null;
|
||||
}
|
||||
|
||||
if (arr instanceof int[]) {
|
||||
int[] ords = (int[]) arr;
|
||||
if (prefix==null) {
|
||||
while (iter.hasNext()) {
|
||||
counts[ords[iter.nextDoc()]]++;
|
||||
|
@ -463,8 +467,8 @@ public class SimpleFacets {
|
|||
if (arrIdx>=0 && arrIdx<nTerms) counts[arrIdx]++;
|
||||
}
|
||||
}
|
||||
} else if (ordReader instanceof Direct16) {
|
||||
short[] ords = ((Direct16)ordReader).getArray();
|
||||
} else if (arr instanceof short[]) {
|
||||
short[] ords = (short[]) arr;
|
||||
if (prefix==null) {
|
||||
while (iter.hasNext()) {
|
||||
counts[ords[iter.nextDoc()] & 0xffff]++;
|
||||
|
@ -476,8 +480,8 @@ public class SimpleFacets {
|
|||
if (arrIdx>=0 && arrIdx<nTerms) counts[arrIdx]++;
|
||||
}
|
||||
}
|
||||
} else if (ordReader instanceof Direct8) {
|
||||
byte[] ords = ((Direct8)ordReader).getArray();
|
||||
} else if (arr instanceof byte[]) {
|
||||
byte[] ords = (byte[]) arr;
|
||||
if (prefix==null) {
|
||||
while (iter.hasNext()) {
|
||||
counts[ords[iter.nextDoc()] & 0xff]++;
|
||||
|
|
|
@ -24,9 +24,6 @@ import org.apache.lucene.search.FieldComparator;
|
|||
import org.apache.lucene.search.FieldComparatorSource;
|
||||
import org.apache.lucene.util.BytesRef;
|
||||
import org.apache.lucene.util.UnicodeUtil;
|
||||
import org.apache.lucene.util.packed.Direct16;
|
||||
import org.apache.lucene.util.packed.Direct32;
|
||||
import org.apache.lucene.util.packed.Direct8;
|
||||
import org.apache.lucene.util.packed.PackedInts;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -438,15 +435,19 @@ class TermOrdValComparator_SML extends FieldComparator<Comparable> {
|
|||
public static FieldComparator createComparator(IndexReader reader, TermOrdValComparator_SML parent) throws IOException {
|
||||
parent.termsIndex = FieldCache.DEFAULT.getTermsIndex(reader, parent.field);
|
||||
final PackedInts.Reader docToOrd = parent.termsIndex.getDocToOrd();
|
||||
PerSegmentComparator perSegComp;
|
||||
PerSegmentComparator perSegComp = null;
|
||||
if (docToOrd.hasArray()) {
|
||||
final Object arr = docToOrd.getArray();
|
||||
if (arr instanceof byte[]) {
|
||||
perSegComp = new ByteOrdComparator((byte[]) arr, parent);
|
||||
} else if (arr instanceof short[]) {
|
||||
perSegComp = new ShortOrdComparator((short[]) arr, parent);
|
||||
} else if (arr instanceof int[]) {
|
||||
perSegComp = new IntOrdComparator((int[]) arr, parent);
|
||||
}
|
||||
}
|
||||
|
||||
if (docToOrd instanceof Direct8) {
|
||||
perSegComp = new ByteOrdComparator(((Direct8) docToOrd).getArray(), parent);
|
||||
} else if (docToOrd instanceof Direct16) {
|
||||
perSegComp = new ShortOrdComparator(((Direct16) docToOrd).getArray(), parent);
|
||||
} else if (docToOrd instanceof Direct32) {
|
||||
perSegComp = new IntOrdComparator(((Direct32) docToOrd).getArray(), parent);
|
||||
} else {
|
||||
if (perSegComp == null) {
|
||||
perSegComp = new AnyOrdComparator(docToOrd, parent);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue