/** * Create a new tree with the specified number of dimensions and * a custom preprocessor. * * @param dim number of dimensions * @param pre The preprocessor to be used * @return PhTreeF * @param <T> value type of the tree */ public static <T> PhTreeF<T> create(int dim, PreProcessorPointF pre) { return new PhTreeF<>(dim, pre); }
@Override public void clear() { tree.clear(); }
private PHTreeP(int dims) { tree = PhTreeF.create(dims); }
@Override public Stats getStats() { return new PHStats(tree.getInternalTree().getStats(), tree.getDim()); }
@Override public String toStringTree() { return tree.getInternalTree().toStringTree(); }
@Override public void insert(double[] key, T value) { tree.put(key, value); }
@Override public T queryExact(double[] point) { return tree.get(point); }
@Override public int getDims() { return tree.getDim(); }
@Override public QueryIterator<PointEntry<T>> query(double[] min, double[] max) { return new QueryIteratorPH<>(tree.query(min, max)); }
@Override public QueryIteratorKNN<PointEntryDist<T>> queryKNN(double[] center, int k) { return new QueryIteratorKnnPH<>(tree.nearestNeighbour(k, center)); }
/** * Same as {@link #query(double[], double[])}, except that it returns a list * instead of an iterator. This may be faster for small result sets. * @param min min values * @param max max values * @return List of query results */ public List<PhEntryF<T>> queryAll(double[] min, double[] max) { return queryAll(min, max, Integer.MAX_VALUE, null, e -> new PhEntryF<T>(PhMapperK.toDouble(e.getKey()), e.getValue())); }
@Override public int getNodeCount() { return tree.getInternalTree().getStats().getNodeCount(); }
/** * Create a new PhTreeF as a wrapper around an existing PhTree. * * @param tree another tree * @return PhTreeF * @param <T> value type of the tree */ public static <T> PhTreeF<T> wrap(PhTree<T> tree) { return new PhTreeF<>(tree); }
@Override public int getDepth() { return tree.getInternalTree().getStats().getBitDepth(); }
/** * Create a new tree with the specified number of dimensions. * * @param dim number of dimensions * @return PhTreeF * @param <T> value type of the tree */ public static <T> PhTreeF<T> create(int dim) { return new PhTreeF<>(dim, new PreProcessorPointF.IEEE()); }