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 InternalNode Split() { var nodeCount = upperKeyValues.Count / 2; var splitKeys = new NodeKey[nodeCount]; upperKeyValues.CopyTo(splitKeys, 0, nodeCount); var splitNode = new InternalNode(); foreach (var upperKey in splitKeys) { splitNode.AddNode(nodeIndices[upperKey], upperKey); nodeIndices.Remove(upperKey); upperKeyValues.Remove(upperKey); } return(splitNode); }
public static void Test02() { var node = new InternalNode(); node.AddNode(100, 5); node.AddNode(101, 10); node.AddNode(102, 15); node.AddNode(103, 20); node.AddNode(104, 25); node.AddNode(105, 30); node.AddNode(106, 28); Console.WriteLine(node.GetPageIndexForKey(18)); var serialized = node.Serialize(); node = new InternalNode(5, serialized); Console.WriteLine(node.GetPageIndexForKey(18)); }