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);
/* 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);
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)