本文整理汇总了C++中BTreeNode::Initialize方法的典型用法代码示例。如果您正苦于以下问题:C++ BTreeNode::Initialize方法的具体用法?C++ BTreeNode::Initialize怎么用?C++ BTreeNode::Initialize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BTreeNode
的用法示例。
在下文中一共展示了BTreeNode::Initialize方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: insert
// The main function that inserts a new key in this B-Tree
void BTree::insert(int k)
{
char varnam[64];
// If tree is empty
if (root == NULL)
{
bzero(varnam, 64);
sprintf(varnam,"%d",count);
strcat(varnam,"node");
varnam[64]=0;
// Allocate memory for root
root =(BTreeNode *)nvalloc_(sizeof(BTreeNode), varnam, 0);
//root = (BTreeNode *)nvalloc_(sizeof(BTreeNode));
root->Initialize(root, t, true, count);
//root = new BTreeNode(t, true);
root->keys[0] = k; // Insert key
root->n = 1; // Update number of keys in root
}
else // If tree is not empty
{
// If root is full, then tree grows in height
if (root->n == 2*t-1)
{
bzero(varnam, 64);
sprintf(varnam,"%d",count);
strcat(varnam,"node");
varnam[64]=0;
// Allocate memory for root
BTreeNode *s =(BTreeNode *)nvalloc_(sizeof(BTreeNode), varnam, 0);
s->Initialize(s, t, false, count);
// Allocate memory for new root
//BTreeNode *s = new BTreeNode(t, false);
BEGIN_OBJTRANS((void *)s,0);
// Make old root as child of new root
s->C[0] = root;
// Split the old root and move 1 key to the new root
s->splitChild(0, root);
// New root has two children now. Decide which of the
// two children is going to have new key
int i = 0;
if (s->keys[0] < k)
i++;
s->C[i]->insertNonFull(k);
nvcommitobj((void *)s,0);
// Change root
root = s;
}
else // If root is not full, call insertNonFull for root
root->insertNonFull(k);
}
count++;
}
示例2: splitChild
// A utility function to split the child y of this node
// Note that y must be full when this function is called
void BTreeNode::splitChild(int i, BTreeNode *y)
{
// Create a new node which is going to store (t-1) keys
// of y
//BTreeNode *z = new BTreeNode(y->t, y->leaf);
char varnam[64];
bzero(varnam, 64);
sprintf(varnam,"%d",count);
strcat(varnam,"node");
varnam[64]=0;
// Allocate memory for root
BTreeNode *z =(BTreeNode *)nvalloc_(sizeof(BTreeNode), varnam, 0);
//root = (BTreeNode *)nvalloc_(sizeof(BTreeNode));
z->Initialize(z, y->t, y->leaf, count);
BEGIN_OBJTRANS((void *)z,0);
z->n = t - 1;
// Copy the last (t-1) keys of y to z
for (int j = 0; j < t-1; j++) {
BEGIN_WRDTRANS((void *)&z->keys[j],0, sizeof(int));
z->keys[j] = y->keys[j+t];
nvcommitword_((void *)&z->keys[j]);
}
// Copy the last t children of y to z
if (y->leaf == false)
{
for (int j = 0; j < t; j++) {
BEGIN_WRDTRANS((void *)&z->C[j],0, sizeof(BTreeNode *));
z->C[j] = y->C[j+t];
nvcommitword_((void *)&z->C[j]);
}
}
nvcommitobj((void *)z,0);
BEGIN_WRDTRANS((void *)&y->n,0, sizeof(int));
// Reduce the number of keys in y
y->n = t - 1;
nvcommitword_((void *)&y->n);
// Since this node is going to have a new child,
// create space of new child
for (int j = n; j >= i+1; j--) {
BEGIN_WRDTRANS((void *)&C[j+1],0, sizeof(BTreeNode *));
C[j+1] = C[j];
nvcommitword_((void *)&C[j+1]);
}
// Link the new child to this node
BEGIN_WRDTRANS((void *)&C[i+1],0, sizeof(BTreeNode *));
C[i+1] = z;
nvcommitword_((void *)&C[i+1]);
// A key of y will move to this node. Find location of
// new key and move all greater keys one space ahead
for (int j = n-1; j >= i; j--){
BEGIN_WRDTRANS((void *)&keys[j+1],0, sizeof(int));
keys[j+1] = keys[j];
nvcommitword_((void *)&keys[j+1]);
}
BEGIN_WRDTRANS((void *)&keys[i],0, sizeof(int));
// Copy the middle key of y to this node
keys[i] = y->keys[t-1];
nvcommitword_((void *)&keys[i]);
// Increment count of keys in this node
n = n + 1;
}