BTDB.KVDBLayer.BTree.BTreeRoot.BuildTreeNode C# (CSharp) Method

BuildTreeNode() private method

private BuildTreeNode ( long keyCount, Func memberGenerator ) : IBTreeNode
keyCount long
memberGenerator Func
return IBTreeNode
        IBTreeNode BuildTreeNode(long keyCount, Func<BTreeLeafMember> memberGenerator)
        {
            var leafs = (keyCount + BTreeLeafComp.MaxMembers - 1) / BTreeLeafComp.MaxMembers;
            var order = 0L;
            var done = 0L;
            return BuildBranchNode(leafs, () =>
                {
                    order++;
                    var reach = keyCount * order / leafs;
                    var todo = (int)(reach - done);
                    done = reach;
                    var keyvalues = new BTreeLeafMember[todo];
                    long totalKeyLen = 0;
                    for (int i = 0; i < keyvalues.Length; i++)
                    {
                        keyvalues[i] = memberGenerator();
                        totalKeyLen += keyvalues[i].Key.Length;
                    }
                    if (totalKeyLen > BTreeLeafComp.MaxTotalLen)
                    {
                        return new BTreeLeaf(_transactionId, keyvalues);
                    }
                    return new BTreeLeafComp(_transactionId, keyvalues);
                });
        }