/** * 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); } }
@Override public PhEntryS<T> nextEntryReuse() { PhEntry<T> pvEntry = iter.nextEntryReuse(); pre.post(pvEntry.getKey(), buffer.lower, buffer.upper); buffer.setValue( pvEntry.getValue() ); return buffer; } @Override
@Override public PhEntryS<T> nextEntry() { long[] lower = new long[dims]; long[] upper = new long[dims]; PhEntry<T> pvEntry = iter.nextEntryReuse(); pre.post(pvEntry.getKey(), lower, upper); return new PhEntryS<>(lower, upper, pvEntry.getValue()); } @Override
/** * @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); }
/** * 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); }
/** * 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); }