mirror of https://github.com/apache/lucene.git
remove dup'd code
This commit is contained in:
parent
3c27980c4a
commit
6261767b33
|
@ -122,32 +122,17 @@ public final class NumericUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns positive int if a > b, negative int if a < b and 0 if a == b */
|
|
||||||
public static int compare(int bytesPerDim, byte[] a, int aIndex, byte[] b, int bIndex) {
|
|
||||||
assert aIndex >= 0;
|
|
||||||
assert bIndex >= 0;
|
|
||||||
int aOffset = aIndex*bytesPerDim;
|
|
||||||
int bOffset = bIndex*bytesPerDim;
|
|
||||||
for(int i=0;i<bytesPerDim;i++) {
|
|
||||||
int cmp = (a[aOffset+i]&0xff) - (b[bOffset+i]&0xff);
|
|
||||||
if (cmp != 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns true if N-dim rect A contains N-dim rect B */
|
/** Returns true if N-dim rect A contains N-dim rect B */
|
||||||
public static boolean contains(int bytesPerDim,
|
public static boolean contains(int bytesPerDim,
|
||||||
byte[] minPackedA, byte[] maxPackedA,
|
byte[] minPackedA, byte[] maxPackedA,
|
||||||
byte[] minPackedB, byte[] maxPackedB) {
|
byte[] minPackedB, byte[] maxPackedB) {
|
||||||
int dims = minPackedA.length / bytesPerDim;
|
int dims = minPackedA.length / bytesPerDim;
|
||||||
for(int dim=0;dim<dims;dim++) {
|
for(int dim=0;dim<dims;dim++) {
|
||||||
if (compare(bytesPerDim, minPackedA, dim, minPackedB, dim) > 0) {
|
int offset = dim * bytesPerDim;
|
||||||
|
if (StringHelper.compare(bytesPerDim, minPackedA, offset, minPackedB, offset) > 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (compare(bytesPerDim, maxPackedA, dim, maxPackedB, dim) < 0) {
|
if (StringHelper.compare(bytesPerDim, maxPackedA, offset, maxPackedB, offset) < 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,6 @@ import org.apache.lucene.index.PointValues.Relation;
|
||||||
import org.apache.lucene.store.IndexInput;
|
import org.apache.lucene.store.IndexInput;
|
||||||
import org.apache.lucene.util.Accountable;
|
import org.apache.lucene.util.Accountable;
|
||||||
import org.apache.lucene.util.BytesRef;
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.apache.lucene.util.NumericUtils;
|
|
||||||
import org.apache.lucene.util.StringHelper;
|
import org.apache.lucene.util.StringHelper;
|
||||||
|
|
||||||
/** Handles intersection of an multi-dimensional shape in byte[] space with a block KD-tree previously written with {@link BKDWriter}.
|
/** Handles intersection of an multi-dimensional shape in byte[] space with a block KD-tree previously written with {@link BKDWriter}.
|
||||||
|
@ -175,7 +174,7 @@ public class BKDReader implements Accountable {
|
||||||
// With only 1D, all values should always be in sorted order
|
// With only 1D, all values should always be in sorted order
|
||||||
if (lastPackedValue == null) {
|
if (lastPackedValue == null) {
|
||||||
lastPackedValue = Arrays.copyOf(packedValue, packedValue.length);
|
lastPackedValue = Arrays.copyOf(packedValue, packedValue.length);
|
||||||
} else if (NumericUtils.compare(bytesPerDim, lastPackedValue, 0, packedValue, 0) > 0) {
|
} else if (StringHelper.compare(bytesPerDim, lastPackedValue, 0, packedValue, 0) > 0) {
|
||||||
throw new RuntimeException("value=" + new BytesRef(packedValue) + " for docID=" + docID + " dim=0" + " sorts before last value=" + new BytesRef(lastPackedValue));
|
throw new RuntimeException("value=" + new BytesRef(packedValue) + " for docID=" + docID + " dim=0" + " sorts before last value=" + new BytesRef(lastPackedValue));
|
||||||
} else {
|
} else {
|
||||||
System.arraycopy(packedValue, 0, lastPackedValue, 0, bytesPerDim);
|
System.arraycopy(packedValue, 0, lastPackedValue, 0, bytesPerDim);
|
||||||
|
|
|
@ -574,7 +574,7 @@ public class BKDWriter implements Closeable {
|
||||||
int block = j / writer.valuesPerBlock;
|
int block = j / writer.valuesPerBlock;
|
||||||
int index = j % writer.valuesPerBlock;
|
int index = j % writer.valuesPerBlock;
|
||||||
assert index >= 0: "index=" + index + " j=" + j;
|
assert index >= 0: "index=" + index + " j=" + j;
|
||||||
int cmp = NumericUtils.compare(bytesPerDim, pivotPackedValue, 0, writer.blocks.get(block), index*numDims+dim);
|
int cmp = StringHelper.compare(bytesPerDim, pivotPackedValue, 0, writer.blocks.get(block), bytesPerDim*(index*numDims+dim));
|
||||||
if (cmp != 0) {
|
if (cmp != 0) {
|
||||||
return cmp;
|
return cmp;
|
||||||
}
|
}
|
||||||
|
@ -618,7 +618,7 @@ public class BKDWriter implements Closeable {
|
||||||
int dimI = i % writer.valuesPerBlock;
|
int dimI = i % writer.valuesPerBlock;
|
||||||
int blockJ = j / writer.valuesPerBlock;
|
int blockJ = j / writer.valuesPerBlock;
|
||||||
int dimJ = j % writer.valuesPerBlock;
|
int dimJ = j % writer.valuesPerBlock;
|
||||||
int cmp = NumericUtils.compare(bytesPerDim, writer.blocks.get(blockI), dimI*numDims+dim, writer.blocks.get(blockJ), dimJ*numDims+dim);
|
int cmp = StringHelper.compare(bytesPerDim, writer.blocks.get(blockI), bytesPerDim*(dimI*numDims+dim), writer.blocks.get(blockJ), bytesPerDim*(dimJ*numDims+dim));
|
||||||
if (cmp != 0) {
|
if (cmp != 0) {
|
||||||
return cmp;
|
return cmp;
|
||||||
}
|
}
|
||||||
|
@ -681,7 +681,7 @@ public class BKDWriter implements Closeable {
|
||||||
final int docIDB = reader.readVInt();
|
final int docIDB = reader.readVInt();
|
||||||
final long ordB = reader.readVLong();
|
final long ordB = reader.readVLong();
|
||||||
|
|
||||||
int cmp = NumericUtils.compare(bytesPerDim, scratch1, dim, scratch2, dim);
|
int cmp = StringHelper.compare(bytesPerDim, scratch1, bytesPerDim*dim, scratch2, bytesPerDim*dim);
|
||||||
|
|
||||||
if (cmp != 0) {
|
if (cmp != 0) {
|
||||||
return cmp;
|
return cmp;
|
||||||
|
@ -967,10 +967,11 @@ public class BKDWriter implements Closeable {
|
||||||
/** Called only in assert */
|
/** Called only in assert */
|
||||||
private boolean valueInBounds(byte[] packedValue, byte[] minPackedValue, byte[] maxPackedValue) {
|
private boolean valueInBounds(byte[] packedValue, byte[] minPackedValue, byte[] maxPackedValue) {
|
||||||
for(int dim=0;dim<numDims;dim++) {
|
for(int dim=0;dim<numDims;dim++) {
|
||||||
if (NumericUtils.compare(bytesPerDim, packedValue, dim, minPackedValue, dim) < 0) {
|
int offset = bytesPerDim*dim;
|
||||||
|
if (StringHelper.compare(bytesPerDim, packedValue, offset, minPackedValue, offset) < 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (NumericUtils.compare(bytesPerDim, packedValue, dim, maxPackedValue, dim) > 0) {
|
if (StringHelper.compare(bytesPerDim, packedValue, offset, maxPackedValue, offset) > 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -984,7 +985,7 @@ public class BKDWriter implements Closeable {
|
||||||
int splitDim = -1;
|
int splitDim = -1;
|
||||||
for(int dim=0;dim<numDims;dim++) {
|
for(int dim=0;dim<numDims;dim++) {
|
||||||
NumericUtils.subtract(bytesPerDim, dim, maxPackedValue, minPackedValue, scratchDiff);
|
NumericUtils.subtract(bytesPerDim, dim, maxPackedValue, minPackedValue, scratchDiff);
|
||||||
if (splitDim == -1 || NumericUtils.compare(bytesPerDim, scratchDiff, 0, scratch1, 0) > 0) {
|
if (splitDim == -1 || StringHelper.compare(bytesPerDim, scratchDiff, 0, scratch1, 0) > 0) {
|
||||||
System.arraycopy(scratchDiff, 0, scratch1, 0, bytesPerDim);
|
System.arraycopy(scratchDiff, 0, scratch1, 0, bytesPerDim);
|
||||||
splitDim = dim;
|
splitDim = dim;
|
||||||
}
|
}
|
||||||
|
@ -1194,7 +1195,7 @@ public class BKDWriter implements Closeable {
|
||||||
|
|
||||||
// only called from assert
|
// only called from assert
|
||||||
private boolean valueInOrder(long ord, byte[] lastPackedValue, byte[] packedValue) {
|
private boolean valueInOrder(long ord, byte[] lastPackedValue, byte[] packedValue) {
|
||||||
if (ord > 0 && NumericUtils.compare(bytesPerDim, lastPackedValue, 0, packedValue, 0) > 0) {
|
if (ord > 0 && StringHelper.compare(bytesPerDim, lastPackedValue, 0, packedValue, 0) > 0) {
|
||||||
throw new AssertionError("values out of order: last value=" + new BytesRef(lastPackedValue) + " current value=" + new BytesRef(packedValue) + " ord=" + ord);
|
throw new AssertionError("values out of order: last value=" + new BytesRef(lastPackedValue) + " current value=" + new BytesRef(packedValue) + " ord=" + ord);
|
||||||
}
|
}
|
||||||
System.arraycopy(packedValue, 0, lastPackedValue, 0, bytesPerDim);
|
System.arraycopy(packedValue, 0, lastPackedValue, 0, bytesPerDim);
|
||||||
|
|
|
@ -678,7 +678,7 @@ public class TestPointQueries extends LuceneTestCase {
|
||||||
// open-ended on the upper bound
|
// open-ended on the upper bound
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lower[dim] != null && upper[dim] != null && NumericUtils.compare(bytesPerDim, lower[dim], 0, upper[dim], 0) > 0) {
|
if (lower[dim] != null && upper[dim] != null && StringHelper.compare(bytesPerDim, lower[dim], 0, upper[dim], 0) > 0) {
|
||||||
byte[] x = lower[dim];
|
byte[] x = lower[dim];
|
||||||
lower[dim] = upper[dim];
|
lower[dim] = upper[dim];
|
||||||
upper[dim] = x;
|
upper[dim] = x;
|
||||||
|
@ -797,7 +797,7 @@ public class TestPointQueries extends LuceneTestCase {
|
||||||
if (lower[dim] == null) {
|
if (lower[dim] == null) {
|
||||||
cmp = 1;
|
cmp = 1;
|
||||||
} else {
|
} else {
|
||||||
cmp = NumericUtils.compare(bytesPerDim, value[dim], 0, lower[dim], 0);
|
cmp = StringHelper.compare(bytesPerDim, value[dim], 0, lower[dim], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmp < 0 || (cmp == 0 && includeLower[dim] == false)) {
|
if (cmp < 0 || (cmp == 0 && includeLower[dim] == false)) {
|
||||||
|
@ -808,7 +808,7 @@ public class TestPointQueries extends LuceneTestCase {
|
||||||
if (upper[dim] == null) {
|
if (upper[dim] == null) {
|
||||||
cmp = -1;
|
cmp = -1;
|
||||||
} else {
|
} else {
|
||||||
cmp = NumericUtils.compare(bytesPerDim, value[dim], 0, upper[dim], 0);
|
cmp = StringHelper.compare(bytesPerDim, value[dim], 0, upper[dim], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmp > 0 || (cmp == 0 && includeUpper[dim] == false)) {
|
if (cmp > 0 || (cmp == 0 && includeUpper[dim] == false)) {
|
||||||
|
|
|
@ -35,6 +35,7 @@ import org.apache.lucene.util.BytesRef;
|
||||||
import org.apache.lucene.util.IOUtils;
|
import org.apache.lucene.util.IOUtils;
|
||||||
import org.apache.lucene.util.LuceneTestCase;
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
import org.apache.lucene.util.NumericUtils;
|
import org.apache.lucene.util.NumericUtils;
|
||||||
|
import org.apache.lucene.util.StringHelper;
|
||||||
import org.apache.lucene.util.TestUtil;
|
import org.apache.lucene.util.TestUtil;
|
||||||
|
|
||||||
public class TestBKD extends LuceneTestCase {
|
public class TestBKD extends LuceneTestCase {
|
||||||
|
@ -734,7 +735,7 @@ public class TestBKD extends LuceneTestCase {
|
||||||
random().nextBytes(queryMin[dim]);
|
random().nextBytes(queryMin[dim]);
|
||||||
queryMax[dim] = new byte[numBytesPerDim];
|
queryMax[dim] = new byte[numBytesPerDim];
|
||||||
random().nextBytes(queryMax[dim]);
|
random().nextBytes(queryMax[dim]);
|
||||||
if (NumericUtils.compare(numBytesPerDim, queryMin[dim], 0, queryMax[dim], 0) > 0) {
|
if (StringHelper.compare(numBytesPerDim, queryMin[dim], 0, queryMax[dim], 0) > 0) {
|
||||||
byte[] x = queryMin[dim];
|
byte[] x = queryMin[dim];
|
||||||
queryMin[dim] = queryMax[dim];
|
queryMin[dim] = queryMax[dim];
|
||||||
queryMax[dim] = x;
|
queryMax[dim] = x;
|
||||||
|
@ -753,8 +754,8 @@ public class TestBKD extends LuceneTestCase {
|
||||||
public void visit(int docID, byte[] packedValue) {
|
public void visit(int docID, byte[] packedValue) {
|
||||||
//System.out.println("visit check docID=" + docID);
|
//System.out.println("visit check docID=" + docID);
|
||||||
for(int dim=0;dim<numDims;dim++) {
|
for(int dim=0;dim<numDims;dim++) {
|
||||||
if (NumericUtils.compare(numBytesPerDim, packedValue, dim, queryMin[dim], 0) < 0 ||
|
if (StringHelper.compare(numBytesPerDim, packedValue, dim*numBytesPerDim, queryMin[dim], 0) < 0 ||
|
||||||
NumericUtils.compare(numBytesPerDim, packedValue, dim, queryMax[dim], 0) > 0) {
|
StringHelper.compare(numBytesPerDim, packedValue, dim*numBytesPerDim, queryMax[dim], 0) > 0) {
|
||||||
//System.out.println(" no");
|
//System.out.println(" no");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -768,11 +769,11 @@ public class TestBKD extends LuceneTestCase {
|
||||||
public Relation compare(byte[] minPacked, byte[] maxPacked) {
|
public Relation compare(byte[] minPacked, byte[] maxPacked) {
|
||||||
boolean crosses = false;
|
boolean crosses = false;
|
||||||
for(int dim=0;dim<numDims;dim++) {
|
for(int dim=0;dim<numDims;dim++) {
|
||||||
if (NumericUtils.compare(numBytesPerDim, maxPacked, dim, queryMin[dim], 0) < 0 ||
|
if (StringHelper.compare(numBytesPerDim, maxPacked, dim*numBytesPerDim, queryMin[dim], 0) < 0 ||
|
||||||
NumericUtils.compare(numBytesPerDim, minPacked, dim, queryMax[dim], 0) > 0) {
|
StringHelper.compare(numBytesPerDim, minPacked, dim*numBytesPerDim, queryMax[dim], 0) > 0) {
|
||||||
return Relation.CELL_OUTSIDE_QUERY;
|
return Relation.CELL_OUTSIDE_QUERY;
|
||||||
} else if (NumericUtils.compare(numBytesPerDim, minPacked, dim, queryMin[dim], 0) < 0 ||
|
} else if (StringHelper.compare(numBytesPerDim, minPacked, dim*numBytesPerDim, queryMin[dim], 0) < 0 ||
|
||||||
NumericUtils.compare(numBytesPerDim, maxPacked, dim, queryMax[dim], 0) > 0) {
|
StringHelper.compare(numBytesPerDim, maxPacked, dim*numBytesPerDim, queryMax[dim], 0) > 0) {
|
||||||
crosses = true;
|
crosses = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -790,8 +791,8 @@ public class TestBKD extends LuceneTestCase {
|
||||||
boolean matches = true;
|
boolean matches = true;
|
||||||
for(int dim=0;dim<numDims;dim++) {
|
for(int dim=0;dim<numDims;dim++) {
|
||||||
byte[] x = docValues[ord][dim];
|
byte[] x = docValues[ord][dim];
|
||||||
if (NumericUtils.compare(numBytesPerDim, x, 0, queryMin[dim], 0) < 0 ||
|
if (StringHelper.compare(numBytesPerDim, x, 0, queryMin[dim], 0) < 0 ||
|
||||||
NumericUtils.compare(numBytesPerDim, x, 0, queryMax[dim], 0) > 0) {
|
StringHelper.compare(numBytesPerDim, x, 0, queryMax[dim], 0) > 0) {
|
||||||
matches = false;
|
matches = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -701,7 +701,7 @@ public abstract class BasePointFormatTestCase extends BaseIndexFileFormatTestCas
|
||||||
random().nextBytes(queryMin[dim]);
|
random().nextBytes(queryMin[dim]);
|
||||||
queryMax[dim] = new byte[numBytesPerDim];
|
queryMax[dim] = new byte[numBytesPerDim];
|
||||||
random().nextBytes(queryMax[dim]);
|
random().nextBytes(queryMax[dim]);
|
||||||
if (NumericUtils.compare(numBytesPerDim, queryMin[dim], 0, queryMax[dim], 0) > 0) {
|
if (StringHelper.compare(numBytesPerDim, queryMin[dim], 0, queryMax[dim], 0) > 0) {
|
||||||
byte[] x = queryMin[dim];
|
byte[] x = queryMin[dim];
|
||||||
queryMin[dim] = queryMax[dim];
|
queryMin[dim] = queryMax[dim];
|
||||||
queryMax[dim] = x;
|
queryMax[dim] = x;
|
||||||
|
@ -733,8 +733,8 @@ public abstract class BasePointFormatTestCase extends BaseIndexFileFormatTestCas
|
||||||
//System.out.println("visit check docID=" + docID + " id=" + idValues.get(docID));
|
//System.out.println("visit check docID=" + docID + " id=" + idValues.get(docID));
|
||||||
for(int dim=0;dim<numDims;dim++) {
|
for(int dim=0;dim<numDims;dim++) {
|
||||||
//System.out.println(" dim=" + dim + " value=" + new BytesRef(packedValue, dim*numBytesPerDim, numBytesPerDim));
|
//System.out.println(" dim=" + dim + " value=" + new BytesRef(packedValue, dim*numBytesPerDim, numBytesPerDim));
|
||||||
if (NumericUtils.compare(numBytesPerDim, packedValue, dim, queryMin[dim], 0) < 0 ||
|
if (StringHelper.compare(numBytesPerDim, packedValue, dim*numBytesPerDim, queryMin[dim], 0) < 0 ||
|
||||||
NumericUtils.compare(numBytesPerDim, packedValue, dim, queryMax[dim], 0) > 0) {
|
StringHelper.compare(numBytesPerDim, packedValue, dim*numBytesPerDim, queryMax[dim], 0) > 0) {
|
||||||
//System.out.println(" no");
|
//System.out.println(" no");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -749,12 +749,12 @@ public abstract class BasePointFormatTestCase extends BaseIndexFileFormatTestCas
|
||||||
boolean crosses = false;
|
boolean crosses = false;
|
||||||
//System.out.println("compare");
|
//System.out.println("compare");
|
||||||
for(int dim=0;dim<numDims;dim++) {
|
for(int dim=0;dim<numDims;dim++) {
|
||||||
if (NumericUtils.compare(numBytesPerDim, maxPacked, dim, queryMin[dim], 0) < 0 ||
|
if (StringHelper.compare(numBytesPerDim, maxPacked, dim*numBytesPerDim, queryMin[dim], 0) < 0 ||
|
||||||
NumericUtils.compare(numBytesPerDim, minPacked, dim, queryMax[dim], 0) > 0) {
|
StringHelper.compare(numBytesPerDim, minPacked, dim*numBytesPerDim, queryMax[dim], 0) > 0) {
|
||||||
//System.out.println(" query_outside_cell");
|
//System.out.println(" query_outside_cell");
|
||||||
return Relation.CELL_OUTSIDE_QUERY;
|
return Relation.CELL_OUTSIDE_QUERY;
|
||||||
} else if (NumericUtils.compare(numBytesPerDim, minPacked, dim, queryMin[dim], 0) < 0 ||
|
} else if (StringHelper.compare(numBytesPerDim, minPacked, dim*numBytesPerDim, queryMin[dim], 0) < 0 ||
|
||||||
NumericUtils.compare(numBytesPerDim, maxPacked, dim, queryMax[dim], 0) > 0) {
|
StringHelper.compare(numBytesPerDim, maxPacked, dim*numBytesPerDim, queryMax[dim], 0) > 0) {
|
||||||
crosses = true;
|
crosses = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -774,8 +774,8 @@ public abstract class BasePointFormatTestCase extends BaseIndexFileFormatTestCas
|
||||||
boolean matches = true;
|
boolean matches = true;
|
||||||
for(int dim=0;dim<numDims;dim++) {
|
for(int dim=0;dim<numDims;dim++) {
|
||||||
byte[] x = docValues[ord][dim];
|
byte[] x = docValues[ord][dim];
|
||||||
if (NumericUtils.compare(numBytesPerDim, x, 0, queryMin[dim], 0) < 0 ||
|
if (StringHelper.compare(numBytesPerDim, x, 0, queryMin[dim], 0) < 0 ||
|
||||||
NumericUtils.compare(numBytesPerDim, x, 0, queryMax[dim], 0) > 0) {
|
StringHelper.compare(numBytesPerDim, x, 0, queryMax[dim], 0) > 0) {
|
||||||
matches = false;
|
matches = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue