Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        // 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);
        }