void BPlusTree::split(BTreeNode * node , int key , int value ) { // key should not be duplicate; // this method is only for leafnodes; int splitIndex = -1; node->InsertIntoLeafNode(key,value); splitIndex = node->getkeys().size()/2; BTreeNode * left = node; BTreeNode * right = new BTreeNode(); right->setLeaf(true); int keyToElevate = node->getkeys()[splitIndex]; right->copyContent(node , splitIndex +1 , node->getkeys().size()-1); node->getkeys().resize(splitIndex+1); if(node->getparent() == NULL ) { root = new BTreeNode(); root->getkeys().push_back(keyToElevate); root->getChidNodes().push_back(left); root->getChidNodes().push_back(right); left->setParent(root); right->setParent(root); return; } if(node->getparent()->isFull()) { splitParent( node->getparent() , keyToElevate , left , right); } else { node->getparent()->insertIntoNode(keyToElevate , left , right); } }