X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/d95cfe00c7dfecac65e0105a92d65f877a4a8e4f..4cbdb39bf0f27ac467d8132ffb03c5a69fdd56e6:/emufs/indice_b_asc.c diff --git a/emufs/indice_b_asc.c b/emufs/indice_b_asc.c index aaccddc..42903c4 100644 --- a/emufs/indice_b_asc.c +++ b/emufs/indice_b_asc.c @@ -75,7 +75,6 @@ static void b_asc_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, i B_NodoHeader nodo_header, nuevo_header; B_NodoEntry *claves, *tmp_claves, *claves_nuevo; - PERR("MAGIC"); do { if (!nodo) { /* CREAR NODO? */ @@ -92,7 +91,7 @@ static void b_asc_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, i int izq_id, der_id, pos_padre, i; B_NodoHeader padre_header, header_der, header_izq; B_NodoEntry *padre_claves, nuevo_entry; - B_NodoEntry a_pasar, *buffer; + B_NodoEntry a_pasar, *buffer, clave_que_sale; b_leer_header(padre, &padre_header); padre_claves = b_leer_claves(padre, &padre_header); @@ -147,23 +146,47 @@ static void b_asc_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, i /* la paso a la derecha */ b_pasar_clave_a_derecha(idx, der, der_id, padre, nodo_header.padre, pos_padre, a_pasar); - /* XXX TODO Liberar memoria y GUARDAR*/ + /* Dejo en nodo las claves que corresponden */ + memcpy(claves, buffer, nodo_header.cant*sizeof(B_NodoEntry)); + b_grabar_nodo(idx, der_id, der); + b_grabar_nodo(idx, nodo_header.padre, padre); + b_grabar_nodo(idx, nodo_id, nodo); free(buffer); - + free(nodo); + free(der); + free(padre); return; } if ((izq_id != -1) && (header_izq.cant < CANT_HIJOS(idx))) { + PERR("ESTOY PASANDO CLAVE A IZQUIERDA"); a_pasar = buffer[0]; - b_pasar_clave_a_izquierda(idx, izq, izq_id, padre, nodo_header.padre, pos_padre, a_pasar, 0, 0); + fprintf(stderr, "YO=%d , a_pasar=%d\n", clave.i_clave, a_pasar.clave.i_clave); + b_pasar_clave_a_izquierda(idx, izq, izq_id, padre, nodo_header.padre, pos_padre, a_pasar, hijo1, padre_claves[pos_padre].hijo_derecho); + /* Pongo las claves que quedan en el nodo */ + memcpy(claves, buffer+1, nodo_header.cant*sizeof(B_NodoEntry)); + b_grabar_nodo(idx, izq_id, izq); + b_grabar_nodo(idx, nodo_header.padre, padre); + b_grabar_nodo(idx, nodo_id, nodo); free(buffer); + free(nodo); + free(izq); + free(padre); return; } - + + /* Tengo que partir, tengo que sacar una clave del padre y mandarla al partir */ + clave_que_sale = padre_claves[pos_padre]; + clave_que_sale.hijo_derecho = -1; + for(i=pos_padre; i