/// <returns>Insert index</returns> public int InsertSorted(SubnodeIntermediateEntry entryToInsert) { int insertIndex = GetSortedInsertIndex(entryToInsert); rgentries.Insert(insertIndex, entryToInsert); return(insertIndex); }
protected void InsertIntermediateEntry(SubnodeIntermediateBlock intermediateBlock, uint key, BlockID blockID) { SubnodeIntermediateEntry intermediateEntry = new SubnodeIntermediateEntry(); intermediateEntry.nid = new NodeID(key); intermediateEntry.bid = blockID; InsertIntermediateEntry(intermediateBlock, intermediateEntry); }
public void UpdateIntermediateEntry(SubnodeIntermediateBlock intermediateBlock, BlockID blockIDOfChild, uint newKeyOfChild) { for (int index = 0; index < intermediateBlock.rgentries.Count; index++) { SubnodeIntermediateEntry entry = intermediateBlock.rgentries[index]; if (entry.bid.Value == blockIDOfChild.Value) { entry.nid = new NodeID(newKeyOfChild); } } }
public int GetSortedInsertIndex(SubnodeIntermediateEntry entryToInsert) { uint key = entryToInsert.nid.Value; int insertIndex = 0; while (insertIndex < rgentries.Count && key > rgentries[insertIndex].nid.Value) { insertIndex++; } return(insertIndex); }
public SubnodeIntermediateBlock(byte[] buffer) : base(buffer) { btype = (BlockType)buffer[0]; cLevel = buffer[1]; ushort cEnt = LittleEndianConverter.ToUInt16(buffer, 2); int offset = 8; for (int index = 0; index < cEnt; index++) { SubnodeIntermediateEntry entry = new SubnodeIntermediateEntry(buffer, offset); rgentries.Add(entry); offset += SubnodeIntermediateEntry.Length; } }
public void CreateNewRoot() { SubnodeIntermediateBlock newRoot = new SubnodeIntermediateBlock(); SubnodeIntermediateEntry rootIntermediateEntry = new SubnodeIntermediateEntry(); // We make sure the old root page has been updated (to prevent the BlockID from changing during update) UpdateBlock(m_rootBlock); rootIntermediateEntry.nid = new NodeID(((SubnodeLeafBlock)m_rootBlock).BlockKey); rootIntermediateEntry.bid = m_rootBlock.BlockID; newRoot.rgentries.Add(rootIntermediateEntry); AddBlock(newRoot); m_rootBlock = newRoot; }
protected void InsertIntermediateEntry(SubnodeIntermediateBlock intermediateBlock, SubnodeIntermediateEntry entryToInsert) { if (intermediateBlock.rgentries.Count < SubnodeIntermediateBlock.MaximumNumberOfEntries) { intermediateBlock.InsertSorted(entryToInsert); } else { throw new Exception("Maximum number of entries has been reached for subnode intermediate block"); } }