]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/indice_b.c
En teoria estaria terminado el b_pasar_clave_a_derecha().
[z.facultad/75.06/emufs.git] / emufs / indice_b.c
index 5491b0d5afd957d6be202a5a0b3dcdea99d18072..89de6e78571a0633735a554a610681a20e4888a9 100644 (file)
@@ -47,9 +47,9 @@ static void b_pedir_clave_derecha(char *, int, char *, int, char *, int, int);
 /** Le pide al hermano izquierdo una clave cuando se eliminan claves */
 static void b_pedir_clave_izquierda(char *, int, char *, int, char *, int, int);
 /** Le pasa al hermano derecho del nodo una clave cuando se insertan claves */
-static void b_pasar_clave_a_derecha(char *, int, char *, int, char *, int, int);
+static void b_pasar_clave_a_derecha(INDICE*, char*, int, char*, int, int, B_NodoEntry);
 /** Le pasa al hermano izquierdo una clave cuando se insertan claves */
-static void b_pasar_clave_a_izquierda(char *, int, char *, int, char *, int, int);
+static void b_pasar_clave_a_izquierda(INDICE*, char*, int, char*, int, int, B_NodoEntry);
 /** Junta 2 nodos y hace uno solo */
 static void b_fundir_nodo(char *, int, char *, int, char *, int, int);
 
@@ -667,37 +667,24 @@ static void b_pedir_clave_derecha(char *der, int der_id, char *padre, int padre_
        b_actualizar_header(nodo, &h_nodo);
 }
 
-static void b_pasar_clave_a_derecha(char *der, int der_id, char *padre, int padre_id, char *nodo, int nodo_id, int pos_clave)
+void b_pasar_clave_a_derecha(INDICE *idx, char *der, int der_id, char *padre, int padre_id, int padre_pos, B_NodoEntry entry)
 {
-/*     int i;
-       B_NodoHeader h_der, h_padre, h_nodo;
-       B_NodoEntry *c_der, *c_padre, *c_nodo;
-
-       b_leer_header(nodo, &h_nodo);
-       c_nodo = b_leer_claves(nodo, &h_nodo);
-       b_leer_header(der, &h_der);
-       c_der = b_leer_claves(der, &h_der);
-       b_leer_header(padre, &h_padre);
-       c_padre = b_leer_claves(padre, &h_padre);
-
-       c_nodo[h_nodo.cant] = c_padre[pos_clave];
-       c_nodo[h_nodo.cant].hijo_derecho = -1; / * XXX * /
-
-       c_padre[pos_clave] = c_der[0];
-       c_padre[pos_clave].hijo_derecho = der_id;
-       
-       / * Muevo las claves de derecho * /
-       for(i=0; i<h_der.cant; i++) {
-               c_der[i] = c_der[i+1];
-       }
-       h_der.cant++;
-
-       b_actualizar_header(der, &h_der);
-       b_actualizar_header(nodo, &h_nodo);
-*/
+       B_NodoHeader der_h, padre_h;
+       B_NodoEntry *der_entries, *padre_entries;
+       /* Leo claves y cabecera del nodo de la derecha y del padre */
+       b_leer_header(der, &der_h);
+       der_entries = b_leer_claves(der, &der_h);
+       b_leer_header(padre, &padre_h);
+       padre_entries = b_leer_claves(padre, &padre_h);
+       /* Inserto en el hijo derecho la clave del padre */
+       b_insertar_en_nodo_con_lugar(idx, padre_entries[padre_pos].clave, padre_entries[padre_pos].dato,
+                       der_id, der, entry.hijo_derecho, der_h.hijo_izquierdo);
+       /* Reemplazo clave del padre por clave nueva */
+       entry.hijo_derecho = der_id;
+       padre_entries[padre_pos] = entry;
 }
 
-static void b_pedir_clave_izquierda(char *izq, int izq_id, char *padre, int padre_id, char *nodo, int nodo_id, int pos_clave)
+void b_pedir_clave_izquierda(char *izq, int izq_id, char *padre, int padre_id, char *nodo, int nodo_id, int pos_clave)
 {
        int i;
        B_NodoHeader h_izq, h_padre, h_nodo;
@@ -725,7 +712,7 @@ static void b_pedir_clave_izquierda(char *izq, int izq_id, char *padre, int padr
        b_actualizar_header(nodo, &h_nodo);
 }
 
-static void b_pasar_clave_a_izquierda(char *izq, int izq_id, char *padre, int padre_id, char *nodo, int nodo_id, int pos_clave)
+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 i;
        B_NodoHeader h_izq, h_padre, h_nodo;