X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/3cdaf72a1a9cb3adc65b441f56751b2e4eb90f1d..040dedefae72d1f07b8ff16073ac095c64cb82df:/emufs/b_plus.c diff --git a/emufs/b_plus.c b/emufs/b_plus.c index 1c1c083..61e7b4c 100644 --- a/emufs/b_plus.c +++ b/emufs/b_plus.c @@ -4,10 +4,10 @@ /**#*#*#*#*#**#*#*#*#*#* Private prototypes*#*#*#*#*#**#*#*#*#*#**#*#*#*/ /* numerando los bloques */ int b_plus_grabar_nodo(INDEXSPECS *idx, NODO_B_PLUS *nodo, int num_node); -NODO_B_PLUS *b_plus_leer_nodo(INDEXSPECS *idx, int num_node); +/*NODO_B_PLUS *b_plus_leer_nodo(INDEXSPECS *idx, int num_node);*/ NODO_B_PLUS *b_plus_crearnodo(INDEXSPECS *idx); int b_plus_destruir_nodo(NODO_B_PLUS *nodo); -int b_plus_insertar_clave(INDEXSPECS *idx, INDEX_DAT *query); +/*int b_plus_insertar_clave(INDEXSPECS *idx, INDEX_DAT *query);*/ /**#*#*#*#*#**#*#*#*#*#*FIN PROTOTYPES*#*#*#*#*#**#*#*#*#*#**#*#*#*#*#*/ @@ -86,9 +86,11 @@ int b_plus_insertar_clave(INDEXSPECS *idx, INDEX_DAT *query) } /* aca tengo el nodo donde deberia ir la clave, y su padre */ - if ( curnode->cant_claves < idx->size_claves ){ + if ( curnode->cant_claves < idx->size_claves/sizeof(int) ){ int *claves_aux = (int*)malloc(idx->size_claves); int *hijos_aux = (int*)malloc(idx->size_hijos); + memset(claves_aux,-1,idx->size_claves); + memset(hijos_aux,-1,idx->size_hijos); i = 0; while ( (curnode->claves[i] < query->clave.i_clave) && (i < curnode->cant_claves)){ claves_aux[i] = curnode->claves[i]; @@ -109,9 +111,7 @@ int b_plus_insertar_clave(INDEXSPECS *idx, INDEX_DAT *query) b_plus_grabar_nodo(idx, curnode, prox_nodo); b_plus_destruir_nodo(curnode); } - - - + /* si el nodo esta lleno tengo que splitear */ if ( curnode->cant_claves == idx->size_claves ) { @@ -149,7 +149,7 @@ int emufs_b_plus_get_bloque(INDEXSPECS *idx, INDEX_DAT *query) { b_plus_destruir_nodo(curnode); return 0; } - + PERR("TENGO LA HOJA"); /* Mientras no encontre la hoja con la clave, busco.. */ /* RECORDAR QUE LAS CLAVES DEBEN ESTAR ORDENADAS PARA QUE ESTO FUNCIONE !! */ while (curnode->nivel > 0 && curnode){ @@ -194,6 +194,7 @@ int emufs_b_plus_get_bloque(INDEXSPECS *idx, INDEX_DAT *query) { /* Llamo a la funcion que mete una clave nueva en el arbol y le paso el bloque a donde tiene que apuntar */ b_plus_insertar_clave(idx, query); + b_plus_destruir_nodo(curnode); return 1; /* SE INSERTO NODO NUEVO */ } else { query->num_bloque = curnode->hijos[i-1];