From: Ricardo Markiewicz Date: Sun, 30 May 2004 00:19:21 +0000 (+0000) Subject: * BUGFIX : Buscar siguiente clave se estaba olvidando del ultimo nodo X-Git-Tag: svn_import_r684~102 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/5fc533bfc8c784106a1d876afb004ded4bb4b068?ds=sidebyside;hp=c0c4be36055930e14b3550fc4e37c5a45a1c0a18 * BUGFIX : Buscar siguiente clave se estaba olvidando del ultimo nodo * BUGFIX : PasarClaveDerecha estaba actualizando mal un puntero --- diff --git a/emufs/indice_b.c b/emufs/indice_b.c index f18312a..7597661 100644 --- a/emufs/indice_b.c +++ b/emufs/indice_b.c @@ -845,6 +845,7 @@ void b_pasar_clave_a_derecha(INDICE *idx, char *der, int der_id, char *padre, in b_leer_header(der, &der_h); padre_entries = b_leer_claves(padre, &padre_h); /* Inserto en el hijo derecho la clave del padre */ + PERR("PASAR CLAVE DERECHA"); b_insertar_en_nodo_con_lugar(idx, padre_entries[padre_pos].clave, padre_entries[padre_pos].dato, der_id, der, der_h.hijo_izquierdo, entry.hijo_derecho); /* Reemplazo clave del padre por clave nueva */ @@ -1281,11 +1282,22 @@ CLAVE emufs_indice_b_obtener_sig_clave(INDICE *idx, CLAVE k) /* Busco al mi padre, perdido en un maremoto hace mucho,muchos * aƱos */ - free(nodo); + tmp = nodo; if (header.padre == -1) { - salida.i_clave = -1; + if (nodo_id == 0) { + /* Bien, son el nodo raiz y aca tendria que ir hacia mi hijo + * derecho + */ + nodo = b_leer_nodo(idx, claves[header.cant-1].hijo_derecho); + free(tmp); + b_leer_header(nodo, &header); + claves = b_leer_claves(nodo, &header); + + salida = claves[0].clave; + } return salida; } + free(nodo); nodo = b_leer_nodo(idx, header.padre); b_leer_header(nodo, &header); claves = b_leer_claves(nodo, &header); diff --git a/emufs/indice_b_asc.c b/emufs/indice_b_asc.c index dc2fdfc..42903c4 100644 --- a/emufs/indice_b_asc.c +++ b/emufs/indice_b_asc.c @@ -146,12 +146,15 @@ 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; } @@ -166,11 +169,15 @@ static void b_asc_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, i 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; inumero, articulo->desc); lista_agregar_fila(lista, articulo->numero, articulo->desc, @@ -729,6 +733,7 @@ void art_consultas_codigos(char *s, t_Lista *lista) ); free(articulo); } + PERR("OBTENGO SIGUIENTE CLAVE"); k = idx->obtener_sig_clave(idx, k); fprintf(stderr, "k.i_clave = %d -- hasta_codigo = %d\n", k.i_clave, hasta_codigo); } diff --git a/emufs_gui/lista.c b/emufs_gui/lista.c index c9b5f00..5e209cd 100644 --- a/emufs_gui/lista.c +++ b/emufs_gui/lista.c @@ -57,7 +57,7 @@ void lista_agregar_fila(t_Lista *lst, ...) /* Para cada columna, leo el dato y lo agrego en la fila */ i = 0; while (col) { - fprintf(stderr, "Dato en columnas %d\n", i); + PERR(col->nombre); switch (col->tipo) { case DATO_INT: nueva->datos[i].i_dato = va_arg(args, int); @@ -101,7 +101,6 @@ void lista_agregar_fila_ordenada(t_Lista *lst, ...) /* Para cada columna, leo el dato y lo agrego en la fila */ i = 0; while (col) { - fprintf(stderr, "Dato en columnas %d\n", i); switch (col->tipo) { case DATO_INT: nueva->datos[i].i_dato = va_arg(args, int);