X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/1103650bf8099a104304d123a1e36c30d537e462..22f4aa739f33817a7c47f08154b4742fce0c5c31:/emufs/b_plus.c diff --git a/emufs/b_plus.c b/emufs/b_plus.c index 20eac04..f061515 100644 --- a/emufs/b_plus.c +++ b/emufs/b_plus.c @@ -340,31 +340,37 @@ int b_plus_insert_nonfull(INDEXSPECS *idx, NODO_B_PLUS *nodo, int num_nodo, INDE int i, num_nodo_hijo; NODO_B_PLUS *hijo; - i = nodo->cant_claves; + i = nodo->cant_claves-1; if ( nodo->nivel == 0 ){ - while ( i >= 1 && query->clave.i_clave < nodo->claves[i] ){ + while ( i >= 0 && query->clave.i_clave < nodo->claves[i] ){ nodo->claves[i+1] = nodo->claves[i]; + nodo->hijos[i+1] = nodo->hijos[i]; i--; } nodo->claves[i+1] = query->clave.i_clave; + nodo->hijos[i+1] = query->num_bloque; nodo->cant_claves++; - b_plus_destruir_nodo(nodo); b_plus_grabar_nodo(idx, nodo, num_nodo); + b_plus_destruir_nodo(nodo); + printf("Pero men yo grabee..\n"); } else { - while ( i >= 1 && query->clave.i_clave < nodo->claves[i] ) + while ( i >= 0 && query->clave.i_clave < nodo->claves[i] ) i--; i++; - num_nodo_hijo = nodo->hijos[i-1]; + num_nodo_hijo = nodo->hijos[i]; hijo = b_plus_leer_nodo(idx, num_nodo_hijo); if ( hijo->cant_claves == idx->size_claves/sizeof(int) ) { - b_plus_split_child(idx, 9999, nodo, i, hijo); + b_plus_split_child(idx, num_nodo, nodo, i, hijo); if ( query->clave.i_clave > nodo->claves[i] ) i++; } - b_plus_insert_nonfull(idx, hijo, num_nodo_hijo, query); + b_plus_destruir_nodo(hijo); + hijo = b_plus_leer_nodo(idx, nodo->hijos[i]); + b_plus_insert_nonfull(idx, hijo, nodo->hijos[i], query); + b_plus_destruir_nodo(hijo); } - b_plus_destruir_nodo(hijo); - return 0; + + return 0; } int b_plus_insertar(INDEXSPECS *idx, INDEX_DAT *query) @@ -382,8 +388,8 @@ int b_plus_insertar(INDEXSPECS *idx, INDEX_DAT *query) b_plus_insert_nonfull(idx, new_root, 0, query); } else { - b_plus_insert_nonfull(idx, raiz, 0, query); printf ("Entre maaaaaallll\n"); + b_plus_insert_nonfull(idx, raiz, 0, query); } return 0;