/// <returns>Insert index</returns>
        public int InsertSorted(SubnodeIntermediateEntry entryToInsert)
        {
            int insertIndex = GetSortedInsertIndex(entryToInsert);

            rgentries.Insert(insertIndex, entryToInsert);
            return(insertIndex);
        }
Exemplo n.º 2
0
        protected void InsertIntermediateEntry(SubnodeIntermediateBlock intermediateBlock, uint key, BlockID blockID)
        {
            SubnodeIntermediateEntry intermediateEntry = new SubnodeIntermediateEntry();

            intermediateEntry.nid = new NodeID(key);
            intermediateEntry.bid = blockID;
            InsertIntermediateEntry(intermediateBlock, intermediateEntry);
        }
Exemplo n.º 3
0
 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;
            }
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 7
0
 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");
     }
 }