]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* BUGFIX : Buscar siguiente clave se estaba olvidando del ultimo nodo
authorRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 30 May 2004 00:19:21 +0000 (00:19 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 30 May 2004 00:19:21 +0000 (00:19 +0000)
 * BUGFIX : PasarClaveDerecha estaba actualizando mal un puntero

emufs/indice_b.c
emufs/indice_b_asc.c
emufs_gui/articulos.c
emufs_gui/lista.c

index f18312ac87da9b54dc75c02a3d1acf89e923b40d..7597661d6a0e852e6906e0d3c5eacf7d6b4f6699 100644 (file)
@@ -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 */
        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 */
        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
                                 */
                                /* Busco al mi padre, perdido en un maremoto hace mucho,muchos
                                 * años
                                 */
-                               free(nodo);
+                               tmp = nodo;
                                if (header.padre == -1) {
                                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;
                                }
                                        return salida;
                                }
+                               free(nodo);
                                nodo = b_leer_nodo(idx, header.padre);
                                b_leer_header(nodo, &header);
                                claves = b_leer_claves(nodo, &header);
                                nodo = b_leer_nodo(idx, header.padre);
                                b_leer_header(nodo, &header);
                                claves = b_leer_claves(nodo, &header);
index dc2fdfcf7311f33c5473fe477bece985a1f67214..42903c4b12abb7cd5f83bdb8e26a33fc580f0431 100644 (file)
@@ -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);
 
                                        /* 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);
                                        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;
                                } 
                        
                                        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);
                                        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];
                                        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<padre_header.cant-1; i++)
                                        padre_claves[i] = padre_claves[i+1];
                                padre_header.cant--;
                                for(i=pos_padre; i<padre_header.cant-1; i++)
                                        padre_claves[i] = padre_claves[i+1];
                                padre_header.cant--;
index 136bf969ab77a8b9b0792776875feebfad2acc5b..be029aa23ba9139d4cedad6305fac62ade5cad1c 100644 (file)
@@ -719,8 +719,12 @@ void art_consultas_codigos(char *s, t_Lista *lista)
                hasta_codigo = mayor.i_clave;
        fprintf(stderr, "k.i_clave = %d  -- hasta_codigo = %d\n", k.i_clave, hasta_codigo);
        while ((k.i_clave != -1) && (k.i_clave <= hasta_codigo)) {
                hasta_codigo = mayor.i_clave;
        fprintf(stderr, "k.i_clave = %d  -- hasta_codigo = %d\n", k.i_clave, hasta_codigo);
        while ((k.i_clave != -1) && (k.i_clave <= hasta_codigo)) {
+               PERR("BUSCO ARTICULO");
                articulo = art_obtener(lst_articulos, k.i_clave, &dummy);
                articulo = art_obtener(lst_articulos, k.i_clave, &dummy);
+               PERR("LO TENGO");
                if (articulo != NULL) {
                if (articulo != NULL) {
+                       PERR("AGREGO A LA LISTA");
+                       fprintf(stderr, "%d - %s\n", articulo->numero, articulo->desc);
                        lista_agregar_fila(lista,
                                                                articulo->numero,
                                                                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);
                }
                                                );
                        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);
        }
                k = idx->obtener_sig_clave(idx, k); 
                fprintf(stderr, "k.i_clave = %d  -- hasta_codigo = %d\n", k.i_clave, hasta_codigo);
        }
index c9b5f0041e603be2a5e055492d208a34b2e20857..5e209cda8f302a77b7550a941dd3da5ce4dfae41 100644 (file)
@@ -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) {
        /* 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);
                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) {
        /* 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);
                switch (col->tipo) {
                        case DATO_INT:
                                nueva->datos[i].i_dato = va_arg(args, int);