/** * Restarts the query with a new query rectangle. * @param lower minimum values of query rectangle * @param upper maximum values of query rectangle */ public void reset(long[] lower, long[] upper) { if (intersect) { pre.pre(qMIN, lower, lLow); pre.pre(upper, qMAX, lUpp); } else { //include pre.pre(lower, lower, lLow); pre.pre(upper, upper, lUpp); } q.reset(lLow, lUpp); } }
/** * @param lo1 old lower left corner * @param up1 old upper right corner * @param lo2 new lower left corner * @param up2 new upper right corner * @return true, if the value could be replaced. * @see PhTree#update(long[], long[]) */ public T update(long[] lo1, long[] up1, long[] lo2, long[] up2) { long[] pOld = new long[lo1.length << 1]; long[] pNew = new long[lo1.length << 1]; pre.pre(lo1, up1, pOld); pre.pre(lo2, up2, pNew); return pht.update(pOld, pNew); }
/** * Check whether an entry with the specified coordinates exists in the tree. * @param lower lower left corner * @param upper upper right corner * @return true if the entry was found * * @see PhTree#contains(long...) */ public boolean contains(long[] lower, long[] upper) { long[] lVal = new long[lower.length*2]; pre.pre(lower, upper, lVal); return pht.contains(lVal); }
/** * Query for all bodies that are included in or partially intersect with the query rectangle. * @param lower 'lower left' corner of query rectangle * @param upper 'upper right' corner of query rectangle * @return Iterator over all matching elements. */ public PhQueryS<T> queryIntersect(long[] lower, long[] upper) { long[] lUpp = new long[lower.length << 1]; long[] lLow = new long[lower.length << 1]; pre.pre(qMIN, lower, lLow); pre.pre(upper, qMAX, lUpp); return new PhQueryS<>(pht.query(lLow, lUpp), dims, pre, true); }
/** * Return a value for the specified key coordinates. * @param lower lower left corner * @param upper upper right corner * @return the value or null if it was not found * * @see PhTree#get(long...) */ public T get(long[] lower, long[] upper) { long[] lVal = new long[lower.length*2]; pre.pre(lower, upper, lVal); return pht.get(lVal); }
/** * Inserts a new ranged object into the tree. * @param lower lower left corner * @param upper upper right corner * @param value value * @return the previous value or {@code null} if no entry existed * * @see PhTree#put(long[], Object) */ public T put(long[] lower, long[] upper, T value) { long[] lVal = new long[lower.length*2]; pre.pre(lower, upper, lVal); return pht.put(lVal, value); }
/** * Removes a ranged object from the tree. * @param lower lower left corner * @param upper upper right corner * @return the value or {@code null} if no entry existed * * @see PhTree#remove(long...) */ public T remove(long[] lower, long[] upper) { long[] lVal = new long[lower.length*2]; pre.pre(lower, upper, lVal); return pht.remove(lVal); }
/** * Query for all bodies that are fully included in the query rectangle. * @param lower 'lower left' corner of query rectangle * @param upper 'upper right' corner of query rectangle * @return Iterator over all matching elements. */ public PhQueryS<T> queryInclude(long[] lower, long[] upper) { long[] lUpp = new long[lower.length << 1]; long[] lLow = new long[lower.length << 1]; pre.pre(lower, lower, lLow); pre.pre(upper, upper, lUpp); return new PhQueryS<>(pht.query(lLow, lUpp), dims, pre, false); }