本文整理汇总了C++中LeafNode::isUnderflow方法的典型用法代码示例。如果您正苦于以下问题:C++ LeafNode::isUnderflow方法的具体用法?C++ LeafNode::isUnderflow怎么用?C++ LeafNode::isUnderflow使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LeafNode
的用法示例。
在下文中一共展示了LeafNode::isUnderflow方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: recursiveRemove
Result BPlusTree::recursiveRemove(Key clave, Node *nodoCorriente, Node *nodoIzquierda, Node *nodoDerecha,
InnerNode *nodoPadreIzquierda, InnerNode *nodoPadreDerecha, InnerNode *nodoPadre, int posicionPadre) {
if (nodoCorriente->isLeaf()) {
LeafNode *nodoHojaCorriente = static_cast<LeafNode*> (nodoCorriente);
LeafNode *nodoHojaIzquierda = static_cast<LeafNode*> (nodoIzquierda);
LeafNode *nodoHojaDerecha = static_cast<LeafNode*> (nodoDerecha);
int posicion = getPosition(nodoHojaCorriente, clave);
if (posicion >= nodoHojaCorriente->keyMount || !equalKey(clave, nodoHojaCorriente->keys[posicion])) {
return Result::NO_ENCONTRADO;
}
nodoHojaCorriente->occupiedSpace -= (nodoHojaCorriente->byteData[posicion].getSize() + nodoHojaCorriente->keys[posicion].getSize() + TreeConstraits::getControlSizeRecord());
nodoHojaCorriente->keyMount--;
for (int i = posicion; i < nodoHojaCorriente->keyMount; i++) {
nodoHojaCorriente->keys[i] = nodoHojaCorriente->keys[i + 1];
nodoHojaCorriente->byteData[i] = nodoHojaCorriente->byteData[i + 1];
}
Result resultado = Result::OK;
// si se borro el elemento de la ultima posicion y no es la raiz
if (posicion == nodoHojaCorriente->keyMount && nodoPadre) {
if (posicionPadre < nodoPadre->keyMount) {
if (nodoHojaCorriente->keyMount >= 1) {
nodoPadre->occupiedSpace -= nodoPadre->keys[posicionPadre].getSize();
nodoPadre->occupiedSpace += nodoHojaCorriente->keys[nodoHojaCorriente->keyMount - 1].getSize();
nodoPadre->keys[posicionPadre] = nodoHojaCorriente->keys[nodoHojaCorriente->keyMount - 1];
}
} else {
if (nodoHojaCorriente->keyMount >= 1) {
resultado |= Result (Result::ACTUALIZAR_ULTIMA_CLAVE, nodoHojaCorriente->keys[nodoHojaCorriente->keyMount - 1]);
} else {
resultado |= Result (Result::ACTUALIZAR_ULTIMA_CLAVE, nodoHojaIzquierda->keys[nodoHojaIzquierda->keyMount - 1]);
}
}
}
if (nodoHojaCorriente->isUnderflow() && !(nodoHojaCorriente == root && nodoHojaCorriente->keyMount >= 1)) {
if (nodoHojaIzquierda == NULL && nodoHojaDerecha == NULL) {
persistNode(root);
if (root)
freeNodeMemory(root);
root = nodoHojaCorriente = NULL;
firstLeaf = 0;
string archivoConfiguracion = fileBlockManager->getPath() + ".cnf";
remove(archivoConfiguracion.c_str());
return Result::OK;
// @fusion
} else if (( (nodoHojaIzquierda == NULL || !nodoHojaIzquierda->elementsCanTransfer())
&& (nodoHojaDerecha == NULL || !nodoHojaDerecha->elementsCanTransfer()))
|| nodoHojaCorriente->keyMount == 0) {
if (nodoPadreIzquierda == nodoPadre) { // cte e izq son hermanos.
resultado |= leafNodeFusion(nodoHojaIzquierda, nodoHojaCorriente);
}else {
resultado |= leafNodeFusion(nodoHojaCorriente, nodoHojaDerecha);
}
// si la derecha mas cargada redistribuyo
} else if ((nodoHojaIzquierda != NULL && !nodoHojaIzquierda->elementsCanTransfer())
&& (nodoHojaDerecha != NULL && nodoHojaDerecha->elementsCanTransfer())) {
if (nodoPadreDerecha == nodoPadre) {
resultado |= redistributeLeftLeaf(nodoHojaCorriente, nodoHojaDerecha, nodoPadreDerecha, posicionPadre);
} else {
resultado |= leafNodeFusion(nodoHojaIzquierda, nodoHojaCorriente);
}
// si la izquierda mas cargada redistribuyo
} else if ((nodoHojaIzquierda != NULL && nodoHojaIzquierda->elementsCanTransfer())
&& (nodoHojaDerecha != NULL && !nodoHojaDerecha->elementsCanTransfer())) {
if (nodoPadreIzquierda == nodoPadre) {
redistributeRightLeaf(nodoHojaIzquierda, nodoHojaCorriente, nodoPadreIzquierda, posicionPadre - 1);
} else {
resultado |= leafNodeFusion(nodoHojaCorriente, nodoHojaDerecha);
}
// izq cte y der son todos hermanos, me fijo cual tiene mas carga y redistribuyo
} else if (nodoPadreIzquierda == nodoPadreDerecha) {
if (nodoHojaIzquierda->occupiedSpace <= nodoHojaDerecha->occupiedSpace) {
resultado |= redistributeLeftLeaf(nodoHojaCorriente, nodoHojaDerecha, nodoPadreDerecha, posicionPadre);
} else {
redistributeRightLeaf(nodoHojaIzquierda, nodoHojaCorriente, nodoPadreIzquierda, posicionPadre - 1);
}
} else {
if (nodoPadreIzquierda == nodoPadre) {
redistributeRightLeaf(nodoHojaIzquierda, nodoHojaCorriente, nodoPadreIzquierda, posicionPadre - 1);
} else {
resultado |= redistributeLeftLeaf(nodoHojaCorriente, nodoHojaDerecha, nodoPadreDerecha, posicionPadre);
}
}
} else {
persistNode(nodoHojaCorriente);
}
return resultado;
} else {
//.........这里部分代码省略.........