Ejemplo n.º 1
0
 internal override object GetCurrent(BtreePage pg, int pos)
 {
     return new BtreeEntry(pg, pos);
 }
Ejemplo n.º 2
0
 internal static void MemCopyData(BtreePage dst_pg, int dst_idx, BtreePage src_pg, int src_idx, int len)
 {
     throw new System.NotImplementedException();
     /* TODOPORT:
     Array.Copy(src_pg.Data, src_idx, dst_pg.Data, dst_idx, len);
     */
 }
Ejemplo n.º 3
0
 internal static void MemCopyItems(BtreePage dst_pg, int dst_idx, BtreePage src_pg, int src_idx, int len)
 {
     Array.Copy(src_pg.items.ToRawArray(), src_idx, dst_pg.items.ToRawArray(), dst_idx, len);
 }
Ejemplo n.º 4
0
 internal BtreeEntry(BtreePage pg, int pos)
 {
     this.pg = pg;
     this.pos = pos;
 }
Ejemplo n.º 5
0
 internal static void MemCopy(BtreePage dst_pg, int dst_idx, BtreePage src_pg, int src_idx, int len)
 {
     MemCopyData(dst_pg, dst_idx, src_pg, src_idx, len);
     MemCopyItems(dst_pg, dst_idx, src_pg, src_idx, len);
 }
Ejemplo n.º 6
0
 internal virtual void Remove(BtreeKey rem)
 {
     if (root == null)
     {
         throw new StorageError(StorageError.KEY_NOT_FOUND);
     }
     int result = root.Remove(rem, height);
     if (result == op_not_found)
     {
         throw new StorageError(StorageError.KEY_NOT_FOUND);
     }
     nElems -= 1;
     if (result == op_underflow)
     {
         if (root.nItems == 0)
         {
             BtreePage newRoot = null;
             if (height != 1)
             {
                 newRoot = (BtreePage) root.items.Get(0);
             }
             root.Deallocate();
             root = newRoot;
             height -= 1;
         }
     }
     updateCounter += 1;
     Modify();
 }
Ejemplo n.º 7
0
        internal void AllocateRootPage(BtreeKey ins)
        {
            Storage s = Storage;
            BtreePage newRoot = null;
            switch (type)
            {
                case ClassDescriptor.tpByte:
                    newRoot = new BtreePageOfByte(s);
                    break;

                case ClassDescriptor.tpShort:
                    newRoot = new BtreePageOfShort(s);
                    break;

                case ClassDescriptor.tpBoolean:
                    newRoot = new BtreePageOfBoolean(s);
                    break;

                case ClassDescriptor.tpInt:
                    newRoot = new BtreePageOfInt(s);
                    break;

                case ClassDescriptor.tpLong:
                    newRoot = new BtreePageOfLong(s);
                    break;

                case ClassDescriptor.tpFloat:
                    newRoot = new BtreePageOfFloat(s);
                    break;

                case ClassDescriptor.tpDouble:
                    newRoot = new BtreePageOfDouble(s);
                    break;

                case ClassDescriptor.tpObject:
                    newRoot = new BtreePageOfObject(s);
                    break;

                case ClassDescriptor.tpString:
                    newRoot = new BtreePageOfString(s);
                    break;

                case ClassDescriptor.tpRaw:
                    newRoot = new BtreePageOfRaw(s);
                    break;

                default:
                    Assert.Failed("Invalid type");
                    break;
            }
            newRoot.Insert(ins, 0);
            newRoot.items.Set(1, root);
            newRoot.nItems = 1;
            root = newRoot;
        }
Ejemplo n.º 8
0
 protected internal void GotoNextItem(BtreePage pg, int pos)
 {
     if (order == TenderBase.IndexSortOrder.Ascent)
     {
         if (++pos == end)
         {
             while (--sp != 0)
             {
                 pos = posStack[sp - 1];
                 pg = pageStack[sp - 1];
                 if (++pos <= pg.nItems)
                 {
                     posStack[sp - 1] = pos;
                     do
                     {
                         pg = (BtreePage) pg.items.Get(pos);
                         end = pg.nItems;
                         pageStack[sp] = pg;
                         posStack[sp] = pos = 0;
                     }
                     while (++sp < pageStack.Length);
                     break;
                 }
             }
         }
         else
         {
             posStack[sp - 1] = pos;
         }
         if (sp != 0 && till != null && -pg.Compare(till, pos) >= till.inclusion)
         {
             sp = 0;
         }
     }
     else
     {
         // descent order
         if (--pos < 0)
         {
             while (--sp != 0)
             {
                 pos = posStack[sp - 1];
                 pg = pageStack[sp - 1];
                 if (--pos >= 0)
                 {
                     posStack[sp - 1] = pos;
                     do
                     {
                         pg = (BtreePage) pg.items.Get(pos);
                         pageStack[sp] = pg;
                         posStack[sp] = pos = pg.nItems;
                     }
                     while (++sp < pageStack.Length);
                     posStack[sp - 1] = --pos;
                     break;
                 }
             }
         }
         else
         {
             posStack[sp - 1] = pos;
         }
         if (sp != 0 && from != null && pg.Compare(from, pos) >= from.inclusion)
         {
             sp = 0;
         }
     }
 }
Ejemplo n.º 9
0
 protected internal virtual object GetCurrent(BtreePage pg, int pos)
 {
     return pg.items.Get(pos);
 }
Ejemplo n.º 10
0
 public virtual void Clear()
 {
     if (root != null)
     {
         root.Purge(height);
         root = null;
         nElems = 0;
         height = 0;
         updateCounter += 1;
         Modify();
     }
 }