/* Si es un hoja, busco dentro de la hoja, otherwise, busco la hoja */
if (nodo->nivel == 0) {
/* Vemos en que bloque deberia ir */
/* Si es un hoja, busco dentro de la hoja, otherwise, busco la hoja */
if (nodo->nivel == 0) {
/* Vemos en que bloque deberia ir */
if (i < 0) {
/* La clave es menor que todas, debo insertarla */
b_plus_destruir_nodo(nodo);
if (i < 0) {
/* La clave es menor que todas, debo insertarla */
b_plus_destruir_nodo(nodo);
/* Muevo siempre el encadenamiento */
nodo->hijos[i+2] = nodo->hijos[i+1];
/* Ahora muevo las claves y sus punteros a bloques del dat */
/* Muevo siempre el encadenamiento */
nodo->hijos[i+2] = nodo->hijos[i+1];
/* Ahora muevo las claves y sus punteros a bloques del dat */
i--;
i++;
num_nodo_hijo = nodo->hijos[i];
hijo = b_plus_leer_nodo(idx, num_nodo_hijo);
if ( hijo->cant_claves == idx->size_claves/sizeof(CLAVE) ) {
b_plus_split_child(idx, num_nodo, nodo, i, hijo);
i--;
i++;
num_nodo_hijo = nodo->hijos[i];
hijo = b_plus_leer_nodo(idx, num_nodo_hijo);
if ( hijo->cant_claves == idx->size_claves/sizeof(CLAVE) ) {
b_plus_split_child(idx, num_nodo, nodo, i, hijo);
/* Si es un hoja, busco dentro de la hoja, otherwise, busco la hoja */
if (nodo->nivel == 0) {
/* Vemos si esta la clave */
/* Si es un hoja, busco dentro de la hoja, otherwise, busco la hoja */
if (nodo->nivel == 0) {
/* Vemos si esta la clave */
if (search_type == 0) {
if (i < 0) exitcode = b_plus_buscar_prepost(idx,key,nodo->hijos[i+1],prepostkey,search_type);
else {
if (search_type == 0) {
if (i < 0) exitcode = b_plus_buscar_prepost(idx,key,nodo->hijos[i+1],prepostkey,search_type);
else {
if (i < 0) return -1; /* Error, no esta la clave */
/* Cheque por las dudas si es hoja o interno, aunque deberia ser hoja */
if (i < 0) return -1; /* Error, no esta la clave */
/* Cheque por las dudas si es hoja o interno, aunque deberia ser hoja */
/* Si es hoja, borro directamente la clave. No se producira underflow
pues lo asegura la recursividad del delete */
if (nodo->nivel == 0) {
/* Si es hoja, borro directamente la clave. No se producira underflow
pues lo asegura la recursividad del delete */
if (nodo->nivel == 0) {
if (i < 0) return -1;
/* Encontre la clave en la pos i, la borro */
for (j = i; j < nodo->cant_claves-1; ++j) {
if (i < 0) return -1;
/* Encontre la clave en la pos i, la borro */
for (j = i; j < nodo->cant_claves-1; ++j) {
if (i < 0) {
PERR("Entre caso 3 del eliminar");
/* No esta en este nodo interno, caso 3. Determino en que rama debe estar */
i = nodo->cant_claves - 1;
if (i < 0) {
PERR("Entre caso 3 del eliminar");
/* No esta en este nodo interno, caso 3. Determino en que rama debe estar */
i = nodo->cant_claves - 1;
i++;
cant_claves_child = b_plus_cant_claves_nodo(idx,nodo->hijos[i]);
if (cant_claves_child > minclaves) emufs_b_plus_eliminar(idx,key,nodo->hijos[i]);
i++;
cant_claves_child = b_plus_cant_claves_nodo(idx,nodo->hijos[i]);
if (cant_claves_child > minclaves) emufs_b_plus_eliminar(idx,key,nodo->hijos[i]);