Exemplo n.º 1
0
 public void CopyTo(BPlusTreeNodeSortedLinks <TKey, TValue> links, int copyFromIndex, int copyToIndex)
 {
     try
     {
         for (int i = copyFromIndex; i < copyToIndex; i++)
         {
             links.Add(this.Keys[i], this.Values[i]);
         }
     }
     catch (Exception)
     {
         throw new IndexOutOfRangeException("Index run out of range while coping BPlusTreeNodeSortedLinks.");
     }
 }
Exemplo n.º 2
0
        protected void PullNodes(BPlusTreeNode <TKey, TValue> nodeToPull, BPlusTreeNode <TKey, TValue> nodeFromPull)
        {
            int numberOfLinksToPull = nodeToPull.KeysCount + (nodeFromPull.KeysCount - nodeToPull.KeysCount) / 2;

            if (nodeToPull.RightNode == nodeFromPull)
            {
                BPlusTreeNodeSortedLinks <TKey, TValue> pulledLinks = new BPlusTreeNodeSortedLinks <TKey, TValue>();

                for (int i = 0; i < numberOfLinksToPull; i++)
                {
                    pulledLinks.Add(nodeFromPull.Links.Keys[0], nodeFromPull.Links.Values[0]);
                    nodeFromPull.Links.RemoveAt(0);
                }

                TKey oldKey = nodeToPull.Links.Keys.Max();

                nodeToPull.Links.AddRange(nodeToPull, pulledLinks);

                nodeToPull.ParentNode.Links.Remove(oldKey);
                nodeToPull.ParentNode.Links.Add(nodeToPull.Links.Keys.Max(), nodeToPull);
            }
            else
            {
                BPlusTreeNodeSortedLinks <TKey, TValue> pulledLinks = new BPlusTreeNodeSortedLinks <TKey, TValue>();

                TKey oldKey = nodeFromPull.Links.Keys.Max();

                for (int i = 0; i < numberOfLinksToPull; i++)
                {
                    pulledLinks.Add(nodeFromPull.Links.Keys[nodeFromPull.KeysCount - 1],
                                    nodeFromPull.Links.Values[nodeFromPull.KeysCount - 1]);
                    nodeFromPull.Links.RemoveAt(nodeFromPull.KeysCount - 1);
                }

                nodeToPull.Links.AddRange(nodeToPull, pulledLinks);

                nodeFromPull.ParentNode.Links.Remove(oldKey);
                nodeFromPull.ParentNode.Links.Add(nodeFromPull.Links.Keys.Max(), nodeFromPull);
            }
        }