@Override public boolean isValid(long[] key) { return dist.dist(v, key) <= maxDist; }
public PhRangeQuery<T> reset(double range, long... center) { filter.set(center, dist, range); dist.toMBB(range, center, min, max); q.reset(min, max); return this; }
distance.knnCalcDistances(center, candidate.getKey(), node.getPostLen() + 1, distances);
distance.knnCalcDistances(center, candidate.getKey(), node.getPostLen() + 1, distances);
private double distToNode(long[] prefix, int bitsToIgnore) { long maskMin = (-1L) << bitsToIgnore; long maskMax = ~maskMin; long[] buf = new long[prefix.length]; for (int i = 0; i < buf.length; i++) { //if v is outside the node, return distance to closest edge, //otherwise return v itself (assume possible distance=0) long min = prefix[i] & maskMin; long max = prefix[i] | maskMax; buf[i] = min > center[i] ? min : (max < center[i] ? max : center[i]); } return distance.dist(center, buf); }
private final boolean findNeighbours(double maxDist, int nMin, long[] val) { results.maxDistance = maxDist; checker.set(val, distance, maxDist); distance.toMBB(maxDist, val, mbbMin, mbbMax); iter.resetAndRun(pht.getRoot(), mbbMin, mbbMax, Integer.MAX_VALUE); if (results.size() < nMin) { //too small, we need a bigger range return false; } return true; }
private double distToNode(long[] prefix, int bitsToIgnore) { long maskMin = (-1L) << bitsToIgnore; long maskMax = ~maskMin; long[] buf = new long[prefix.length]; for (int i = 0; i < buf.length; i++) { //if v is outside the node, return distance to closest edge, //otherwise return v itself (assume possible distance=0) long min = prefix[i] & maskMin; long max = prefix[i] | maskMax; buf[i] = min > center[i] ? min : (max < center[i] ? max : center[i]); } return distance.dist(center, buf); }
private final boolean findNeighbours(double maxDist, int nMin, long[] val) { results.maxDistance = maxDist; checker.set(val, distance, maxDist); distance.toMBB(maxDist, val, mbbMin, mbbMax); iter.resetAndRun(pht.getRoot(), mbbMin, mbbMax, Integer.MAX_VALUE); if (results.size() < nMin) { //too small, we need a bigger range return false; } return true; }
@Override public boolean isValid(int bitsToIgnore, long[] prefix) { long maskMin = (-1L) << bitsToIgnore; long maskMax = ~maskMin; long[] buf = new long[prefix.length]; for (int i = 0; i < buf.length; i++) { //if v is outside the node, return distance to closest edge, //otherwise return v itself (assume possible distance=0) long min = prefix[i] & maskMin; long max = prefix[i] | maskMax; buf[i] = min > v[i] ? min : (max < v[i] ? max : v[i]); } return dist.dist(v, buf) <= maxDist; }
private double distToNode(long[] prefix, int bitsToIgnore) { long maskMin = (-1L) << bitsToIgnore; long maskMax = ~maskMin; long[] buf = new long[prefix.length]; for (int i = 0; i < buf.length; i++) { //if v is outside the node, return distance to closest edge, //otherwise return v itself (assume possible distance=0) long min = prefix[i] & maskMin; long max = prefix[i] | maskMax; buf[i] = min > center[i] ? min : (max < center[i] ? max : center[i]); } return distance.dist(center, buf); }
private double distToNode(long[] prefix, int bitsToIgnore) { long maskMin = (-1L) << bitsToIgnore; long maskMax = ~maskMin; long[] buf = new long[prefix.length]; for (int i = 0; i < buf.length; i++) { //if v is outside the node, return distance to closest edge, //otherwise return v itself (assume possible distance=0) long min = prefix[i] & maskMin; long max = prefix[i] | maskMax; buf[i] = min > center[i] ? min : (max < center[i] ? max : center[i]); } return distance.dist(center, buf); }
private double distToNode(long[] prefix, int bitsToIgnore) { long maskMin = (-1L) << bitsToIgnore; long maskMax = ~maskMin; long[] buf = new long[prefix.length]; for (int i = 0; i < buf.length; i++) { //if v is outside the node, return distance to closest edge, //otherwise return v itself (assume possible distance=0) long min = prefix[i] & maskMin; long max = prefix[i] | maskMax; buf[i] = min > center[i] ? min : (max < center[i] ? max : center[i]); } return distance.dist(center, buf); }
private double calcDiagonal(long[] key, Node node) { //First, get min/max. long[] min = new long[dims]; long[] max = new long[dims]; long mask = (-1L) << (node.getPostLen()+1); long mask1111 = ~mask; for (int i = 0; i < dims; i++) { min[i] = key[i] & mask; max[i] = (key[i] & mask) | mask1111; } //We calculate the diagonal of the node double diagonal = distance.dist(min, max); if (diagonal <= 0 || Double.isNaN(diagonal)) { return 1; } //calc radius of inner circle return diagonal*0.5;// /Math.sqrt(dims); }
private double calcDiagonal(long[] key, Node node) { //First, get min/max. long[] min = new long[dims]; long[] max = new long[dims]; long mask = (-1L) << (node.getPostLen()+1); long mask1111 = ~mask; for (int i = 0; i < dims; i++) { min[i] = key[i] & mask; max[i] = (key[i] & mask) | mask1111; } //We calculate the diagonal of the node double diagonal = distance.dist(min, max); if (diagonal <= 0 || Double.isNaN(diagonal)) { return 1; } //calc radius of inner circle return diagonal*0.5;// /Math.sqrt(dims); }
private void addEntry(PhEntry<T> e, long[] center) { double dist = distance.dist(center, e.getKey()); if (resultSize < entries.size()) { entries.get(resultSize).set(e, dist); } else { PhEntryDist<T> de = new PhEntryDist<>(e, dist); entries.add(de); } resultSize++; }
private void addEntry(PhEntry<T> e, long[] center) { double dist = distance.dist(center, e.getKey()); if (resultSize < entries.size()) { entries.get(resultSize).set(e, dist); } else { PhEntryDist<T> de = new PhEntryDist<>(e, dist); entries.add(de); } resultSize++; }
private void addEntry(PhEntry<T> e, long[] center) { double dist = distance.dist(center, e.getKey()); if (resultSize < entries.size()) { entries.get(resultSize).set(e, dist); } else { PhEntryDist<T> de = new PhEntryDist<>(e, dist); entries.add(de); } resultSize++; }