public MultiBinLookup(final CoordinateRange[] coordinateRanges) { binIdToRangeMap = new HashMap<>(); for (final CoordinateRange r : coordinateRanges) { binIdToRangeMap.put(new ByteArray(r.getBinId()), r); } }
private static boolean inBounds(final CoordinateRange range, final Coordinate coordinate) { final long coord = coordinate.getCoordinate(); return (range.getMinCoordinate() <= coord) && (range.getMaxCoordinate() >= coord); } }
@Override public void fromBinary(final byte[] bytes) { final ByteBuffer buf = ByteBuffer.wrap(bytes); final int idLength = VarintUtils.readUnsignedInt(buf); if (idLength > 0) { multiDimensionalId = new byte[idLength]; buf.get(multiDimensionalId); } else { multiDimensionalId = null; } coordinateRangesPerDimension = new CoordinateRange[VarintUtils.readUnsignedInt(buf)][]; for (int d = 0; d < coordinateRangesPerDimension.length; d++) { coordinateRangesPerDimension[d] = new CoordinateRange[VarintUtils.readUnsignedInt(buf)]; } for (int d = 0; d < coordinateRangesPerDimension.length; d++) { for (int i = 0; i < coordinateRangesPerDimension[d].length; i++) { final byte[] serializedRange = new byte[VarintUtils.readUnsignedInt(buf)]; buf.get(serializedRange); coordinateRangesPerDimension[d][i] = new CoordinateRange(); coordinateRangesPerDimension[d][i].fromBinary(serializedRange); } } } }
numPerDimension[d++] = dim.length; for (final CoordinateRange range : dim) { final byte[] serializedRange = range.toBinary(); byteLength += (serializedRange.length + VarintUtils.unsignedIntByteLength(serializedRange.length));
public static MultiDimensionalCoordinateRanges getCoordinateRanges( final BinRange[][] binRangesPerDimension, final SpaceFillingCurve sfc, final int numDimensions, final byte tier) { final CoordinateRange[][] coordinateRangesPerDimension = new CoordinateRange[numDimensions][]; for (int d = 0; d < coordinateRangesPerDimension.length; d++) { coordinateRangesPerDimension[d] = new CoordinateRange[binRangesPerDimension[d].length]; for (int i = 0; i < binRangesPerDimension[d].length; i++) { final long[] range = sfc.normalizeRange( binRangesPerDimension[d][i].getNormalizedMin(), binRangesPerDimension[d][i].getNormalizedMax(), d); coordinateRangesPerDimension[d][i] = new CoordinateRange(range[0], range[1], binRangesPerDimension[d][i].getBinId()); } } return new MultiDimensionalCoordinateRanges(new byte[] {tier}, coordinateRangesPerDimension); }
public static RangeByBinIdCache createBinLookup(final CoordinateRange[] coordinateRanges) { if (coordinateRanges == null) { return new NullBinLookup(); } else if ((coordinateRanges.length == 1) && (coordinateRanges[0].getBinId() == null)) { return new SingleBinLookup(coordinateRanges[0]); } else { return new MultiBinLookup(coordinateRanges); } } }