]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/indice_b.c
Ya casi lo tenemo al muchacho insertar...
[z.facultad/75.06/emufs.git] / emufs / indice_b.c
index d7f2d8f2f28cbaa705c5a7fac60e448358a1a17b..bf07a88577b872dbbb20df24da9a28723973779e 100644 (file)
@@ -715,7 +715,7 @@ static void b_borrar_clave(INDICE *idx, char *nodo, int nodo_id, CLAVE k)
                        fprintf(stderr, "DESPUES DE PEDIR DERECHA TENGO %d claves\n", header_actual.cant);
                } else if ((izquierda_id != -1) && (header_izq.cant > MIN_HIJOS(idx))) {
                        PERR("Le pido clave a izquierda");
-                       b_pedir_clave_izquierda(izq, izquierda_id, padre, padre_id, actual, actual_id, pos_padre-1);
+                       b_pedir_clave_izquierda(izq, izquierda_id, padre, padre_id, actual, actual_id, pos_padre);
                        /* como se modificaron cosas, leo de nuevo los headers */
                        b_leer_header(izq, &header_izq);
                        b_leer_header(padre, &header_padre);
@@ -733,9 +733,9 @@ static void b_borrar_clave(INDICE *idx, char *nodo, int nodo_id, CLAVE k)
 
                /* TODO que guardo ?, todo ? */
                b_grabar_nodo(idx, actual_id, actual);
-               b_grabar_nodo(idx, izquierda_id, izq);
-               b_grabar_nodo(idx, derecha_id, der);
-               b_grabar_nodo(idx, padre_id, padre);
+               if (izquierda_id != -1) b_grabar_nodo(idx, izquierda_id, izq);
+               if (derecha_id != -1) b_grabar_nodo(idx, derecha_id, der);
+               if (padre_id != -1) b_grabar_nodo(idx, padre_id, padre);
                if (actual_id != -1) free(actual);
                if (derecha_id != -1) free(der);
                if (izquierda_id != -1) free(izq);
@@ -805,19 +805,24 @@ void b_pedir_clave_izquierda(char *izq, int izq_id, char *padre, int padre_id, c
        b_leer_header(padre, &h_padre);
        c_padre = b_leer_claves(padre, &h_padre);
 
-       for(i=h_nodo.cant; i>0;i++)
+       PERR("Muevo las claves");
+       for(i=h_nodo.cant; i>0;i--)
                c_nodo[i] = c_nodo[i-1];
 
        h_nodo.cant++;
+       PERR("Paso clave de padre a nodo");
        c_nodo[0] = c_padre[pos_clave];
        c_nodo[0].hijo_derecho = -1; /* XXX */
+       PERR("Paso clave de izquierda a padre");
        c_padre[pos_clave] = c_izq[h_izq.cant-1];
-       c_padre[pos_clave].hijo_derecho = izq_id;
+       c_padre[pos_clave].hijo_derecho = nodo_id;
        h_izq.cant--;
 
+       PERR("ACTUALIZO")
        b_actualizar_header(izq, &h_izq);
        b_actualizar_header(padre, &h_padre);
        b_actualizar_header(nodo, &h_nodo);
+       PERR("Salgo");
 }
 
 void b_pasar_clave_a_izquierda(INDICE* idx, char *izq, int izq_id, char *padre, int padre_id, int padre_pos, B_NodoEntry entry, int id_entry_hijo_izq, int id_entry_nodo)