public static void Test03() { var intNode = new InternalNode(); intNode.AddNode(100, 5); intNode.AddNode(101, 10); intNode.AddNode(102, 15); intNode.AddNode(103, 20); intNode.AddNode(104, 25); intNode.AddNode(105, 30); var split = intNode.Split(); Console.WriteLine(intNode.GetPageIndexForKey(28)); Console.WriteLine(split.GetPageIndexForKey(28)); var leafNode = new LeafNode(); leafNode.AddDataRow(50, new byte[] { 1 }); leafNode.AddDataRow(100, new byte[] { 2 }); leafNode.AddDataRow(150, new byte[] { 3 }); leafNode.AddDataRow(200, new byte[] { 4 }); leafNode.AddDataRow(250, new byte[] { 5 }); leafNode.AddDataRow(300, new byte[] { 6 }); leafNode.AddDataRow(350, new byte[] { 7 }); leafNode.AddDataRow(400, new byte[] { 8 }); Console.WriteLine(leafNode.GetDataRow(350)[0]); var leafSplit = leafNode.Split(); Console.WriteLine(leafNode.GetDataRow(350)[0]); Console.WriteLine(leafSplit.GetDataRow(350).ByteCount); }
// Split off and return the lower half in a new node // We split off the lower half so that data about the upper key value of this node does not change public LeafNode Split() { var keyCount = dataKeys.Count / 2; var upperKeys = new NodeKey[keyCount]; dataKeys.CopyTo(upperKeys, 0, keyCount); var splitNode = new LeafNode(); foreach (var upperKey in upperKeys) { splitNode.AddDataRow(upperKey, dataRows[upperKey]); dataKeys.Remove(upperKey); dataRows.Remove(upperKey); } return(splitNode); }