internal override object GetCurrent(BtreePage pg, int pos) { return new BtreeEntry(pg, pos); }
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); */ }
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); }
internal BtreeEntry(BtreePage pg, int pos) { this.pg = pg; this.pos = pos; }
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); }
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(); }
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; }
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; } } }
protected internal virtual object GetCurrent(BtreePage pg, int pos) { return pg.items.Get(pos); }
public virtual void Clear() { if (root != null) { root.Purge(height); root = null; nElems = 0; height = 0; updateCounter += 1; Modify(); } }