internal virtual void Find(RectangleR2 r, ArrayList result, int level) { if (--level != 0) { /* this is an internal node in the tree */ for (int i = 0; i < n; i++) { if (r.Intersects(b[i])) { ((RtreeR2Page) branch.Get(i)).Find(r, result, level); } } } else { /* this is a leaf node */ for (int i = 0; i < n; i++) { if (r.Intersects(b[i])) { result.Add(branch.Get(i)); } } } }
internal virtual int Remove(RectangleR2 r, IPersistent obj, int level, ArrayList reinsertList) { if (--level != 0) { for (int i = 0; i < n; i++) { if (r.Intersects(b[i])) { RtreeR2Page pg = (RtreeR2Page) branch.Get(i); int reinsertLevel = pg.Remove(r, obj, level, reinsertList); if (reinsertLevel >= 0) { if (pg.n >= minFill) { SetBranch(i, pg.Cover(), pg); Modify(); } else { // not enough entries in child reinsertList.Add(pg); reinsertLevel = level - 1; RemoveBranch(i); } return reinsertLevel; } } } } else { for (int i = 0; i < n; i++) { if (branch.ContainsElement(i, obj)) { RemoveBranch(i); return 0; } } } return -1; }