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);
});
}