]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
Cursor para recorrer el arbol andando. Ver en rango de facturas.
authorRicardo Markiewicz <gazer.arg@gmail.com>
Fri, 28 May 2004 02:09:46 +0000 (02:09 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Fri, 28 May 2004 02:09:46 +0000 (02:09 +0000)
emufs/indice_b.c
emufs_gui/facturas.c

index 89a5b7715e8792c7670db4e0e1914269e6faa983..f032d51805e834070f7647d46bd74ec9f64bf45a 100644 (file)
@@ -285,11 +285,11 @@ char *b_leer_nodo(INDICE *idx, int id)
        }
 
        /* Si estoy manejando string tengo que sacar las abreviaturas */
-       if (idx->tipo_dato == IDX_STRING) {
+/*     XXX if (idx->tipo_dato == IDX_STRING) {
                b_leer_header(out, &header);
                claves = b_leer_claves(out, &header);
                desabreviar_claves(idx, claves, &header);
-       }
+       }*/
        fclose(fp);
        return out;
 }
@@ -301,11 +301,11 @@ static void b_grabar_nodo(INDICE *idx, int id, char *data)
        B_NodoEntry *claves;
 
        /* Si las claves son de tipo string debo abreviar antes de guardar */
-       if (idx->tipo_dato == IDX_STRING) {
+/*XXX  if (idx->tipo_dato == IDX_STRING) {
                b_leer_header(data, &header);
                claves = b_leer_claves(data, &header);
                abreviar_claves(idx, claves, &header);
-       }
+       }*/
        fp = fopen(idx->filename, "r+");
        fseek(fp, id*idx->tam_bloque, SEEK_SET);
        fwrite(data, 1, idx->tam_bloque, fp);
@@ -1151,14 +1151,18 @@ CLAVE emufs_indice_b_obtener_sig_clave(INDICE *idx, CLAVE k)
                while ((i<header.cant) && (emufs_indice_es_menor(idx, claves[i].clave, k))) i++;
                if ((i<header.cant) && (emufs_indice_es_igual(idx, claves[i].clave, k))) {                              
                                /* LA ENCONTRE! , ahora busco la siguiente clave!! */           
+                               fprintf(stderr, "Me encontre en pos %d en el padre\n", i);
                                if ((i+1)<header.cant) {
+                                       PERR("Joya, hay lugar a la derecha");
                                        if (claves[i].hijo_derecho == -1) {
+                                               PERR("Y soy hoja!!");
                                                /* Joya!, fue facil, la siguiente va en camino! */
-                                               salida = claves[i].clave;
+                                               salida = claves[i+1].clave;
                                                free(nodo);
                                                return salida;
                                        }
 
+                                       PERR("No soy hoja, busco la hoja de menor");
                                        /* Mmmmm ... la siguiente esta en uno de mis hijo */
                                        /* Necesito la mas chica de las siguientes, para eso
                                         * me voy a mi hijo derecho y de ahi bajo siempre
@@ -1178,21 +1182,34 @@ CLAVE emufs_indice_b_obtener_sig_clave(INDICE *idx, CLAVE k)
                                        return salida;
                                }
 
+                               PERR("Fuck, tengo que ir otro nodo a buscar");
                                /* Fuck, la siguiente clave la tengo que sacar de padre */
                                /* Busco al mi padre, perdido en un maremoto hace mucho,muchos
                                 * aƱos
                                 */
                                free(nodo);
+                               if (header.padre == -1) {
+                                       salida.i_clave = -1;
+                                       return salida;
+                               }
                                nodo = b_leer_nodo(idx, header.padre);
                                b_leer_header(nodo, &header);
                                claves = b_leer_claves(nodo, &header);
                                i = 0;
-                               while ((i<header.cant) && (emufs_indice_es_menor(idx, claves[i].clave, k))) i++;
-                               if (i<header.cant)
+                               PERR("Busco mi siguiente en mi padre");
+                               fprintf(stderr, "Padre tiene %d claves\n", header.cant);
+                               while ((i<header.cant) && (emufs_indice_es_menor(idx, claves[i].clave, k))) {
+                                       i++;
+                                       fprintf(stderr, "Proximo i : %d\n", i);
+                               }
+                               if (i<header.cant) {
+                                       PERR("Siguiente clave encontrada");
                                        salida = claves[i].clave;
-                               else
+                               } else {
                                        /* No hay mas claves! */
+                                       PERR("Busque y busque pero no aparecio");
                                        salida.i_clave = -1;
+                               }
                                return salida;
                } else {
                        tmp = nodo;
@@ -1209,6 +1226,7 @@ CLAVE emufs_indice_b_obtener_sig_clave(INDICE *idx, CLAVE k)
        }
 
        /* No encontre la clave pasada, no existe */
+       PERR("No encontre la clave pasada!!");
        salida.i_clave = -1;
        return salida;
 }
index 6e38afb4f49ac3918eff7dfeacdb3aa6acbf5f2c..82be7bacef8346de96c46af7ec2eaeeaa514153c 100644 (file)
@@ -1044,7 +1044,7 @@ void fact_consultas_fechas(char *s)
        t_Form *form;
        WINDOW *win, *win1;
        INDICE *idx;
-       CLAVE k;
+       CLAVE k_menor, k_mayor;
 
        win = newwin(LINES-4, COLS-2, 2, 1);
        win1 = derwin(win, LINES-6, COLS-4, 1, 1);
@@ -1071,14 +1071,14 @@ void fact_consultas_fechas(char *s)
        idx = emufs_buscar_indice_por_nombre(lst_facturas->fp, "emision");
        if (idx==NULL) PERR("INDICE EMISION NO SE ENCUENTRA!!");
        if (strlen(desde_fecha) == 0) {
-               k = idx->obtener_menor_clave(idx);
-               emufs_indice_obtener_valor_desde_clave(idx, k, desde_fecha);
+               k_menor = idx->obtener_menor_clave(idx);
+               emufs_indice_obtener_valor_desde_clave(idx, k_menor, desde_fecha);
                PERR("OBTUVE MENOR CLAVE DESDE EL INDICE");
                PERR(desde_fecha);
        }
        if (strlen(hasta_fecha) == 0) {
-               k = idx->obtener_mayor_clave(idx);
-               emufs_indice_obtener_valor_desde_clave(idx, k, hasta_fecha);
+               k_mayor = idx->obtener_mayor_clave(idx);
+               emufs_indice_obtener_valor_desde_clave(idx, k_mayor, hasta_fecha);
                PERR("OBTUVE MAYOR CLAVE DESDE EL INDICE");
                PERR(hasta_fecha);
        }
@@ -1094,14 +1094,14 @@ void fact_consultas_fechas(char *s)
        lista_agregar_columna(lista, "Forma de Pago", DATO_STR, 40, 19);   /* fp         */
 
        /* Leo los datos desde el archivo */
-       while (k.i_clave != -1) {
+       while (k_menor.i_clave != -1) {
                t_Factura fact;
                int error, cant, i;
                char *leo;
                EMUFS_REG_SIZE size;
                INDICE_DATO *datos;
                CLAVE k1;
-               datos = idx->buscar_entradas(idx, k, &cant);
+               datos = idx->buscar_entradas(idx, k_menor, &cant);
                for(i=0; i<cant; i++) {
                        error = 1;
                        k1.i_clave = datos[i].id;
@@ -1122,7 +1122,7 @@ void fact_consultas_fechas(char *s)
                        );
                }
                if (datos) free(datos);
-               k = idx->obtener_sig_clave(idx, k);
+               k_menor = idx->obtener_sig_clave(idx, k_menor);
        }
 
        curs_set(0);