コード例 #1
0
ファイル: RtreeR2Page.cs プロジェクト: kjk/tenderbase
 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));
             }
         }
     }
 }
コード例 #2
0
ファイル: RtreeR2Page.cs プロジェクト: kjk/tenderbase
 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;
 }