]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
al parecer andan bien los insertar y eliminar ordenado en los tipos 1 y 3
authorNicolás Dimov <ndimov@gmail.com>
Sat, 29 May 2004 18:19:09 +0000 (18:19 +0000)
committerNicolás Dimov <ndimov@gmail.com>
Sat, 29 May 2004 18:19:09 +0000 (18:19 +0000)
emufs/tipo1.c
emufs/tipo1_bplus_main.c
emufs/tipo3.c
emufs/tipo3_bplus_main.c

index 7de346f20563bdb773a670b72619fc265b7ec9e2..bf15663f5f660e5c64308650ebef36e8c656e416 100644 (file)
@@ -970,15 +970,16 @@ int emufs_tipo1_eliminar_ordenado(EMUFS *emu, CLAVE clave, int *err)
 {
        char *bloque, *aux;
        INDEX_DAT query;
-       int result, iter, cant_reg;
+       int result, iter, cant_reg, leidos;
        EMUFS_REG_SIZE tam_reg;
        CLAVE clave_ajena;
+       
+       
        /*cargo el query para buscar*/
        query.num_bloque = 0;
        query.clave = clave;
        /*mando a buscar el bloque donde esta la clave que quiero eliminar*/
        result = emufs_b_plus_get_bloque(emu->indices, &query, 0);
-       printf("el bloque es: %d\n", query.num_bloque);
        if ( result == 1 ){
                PERR("SE PRODUJO UN ERROR EN EL ARBOL");
                return -1;
@@ -1004,22 +1005,22 @@ int emufs_tipo1_eliminar_ordenado(EMUFS *emu, CLAVE clave, int *err)
                /* TENGOQ QUE BORRAR LA CLAVE DEL ARBOL !!!!*/
                /* Y HAY QUE BORRAR EL BLOQUE DEL ARCHIVO*/
        }
-       while ( iter < emu->tam_bloque ){
+       leidos = 0;
+       while ( iter < emu->tam_bloque /*&& leidos < cant_reg*/){
                memcpy(&tam_reg, aux+sizeof(EMUFS_REG_ID), sizeof(EMUFS_REG_SIZE));
                clave_ajena = emufs_indice_generar_clave(emu->indices, aux+sizeof(EMUFS_TIPO1_REG_HEADER));
-               printf("lei clave: %d\n", clave_ajena);
                if ( emufs_indice_es_igual(emu->indices, clave, clave_ajena) ){
-                       /*tenngo que borrar este registro*/
+                       /*tengo que borrar este registro*/
                        /*limpio el espacio que ocupaba*/
-                       PERR("LA ENCONTRE");
                        memset(aux, 0, tam_reg+sizeof(EMUFS_TIPO1_REG_HEADER));
                        /*hay que reacomodar todo*/
                        /*me posiciono en el reg siguiente*/
                        iter += tam_reg+sizeof(EMUFS_TIPO1_REG_HEADER);
                        break;/*ya borre, corto aca*/
                }
+               leidos++;
                iter += tam_reg+sizeof(EMUFS_TIPO1_REG_HEADER);
-               aux += iter;
+               aux += tam_reg+sizeof(EMUFS_TIPO1_REG_HEADER);
        }
        /*reacomodo el bloque */
        memcpy(aux, aux+tam_reg+sizeof(EMUFS_TIPO1_REG_HEADER), emu->tam_bloque-iter-sizeof(int)); 
@@ -1029,6 +1030,7 @@ int emufs_tipo1_eliminar_ordenado(EMUFS *emu, CLAVE clave, int *err)
        /*grabo el bloque en el archivo*/
        if ( emufs_tipo1_grabar_bloque_fsc(emu, bloque, query.num_bloque, EMUFS_NOT_FOUND, err) == EMUFS_NOT_FOUND ){
                PERR("NO SE PUDO GRABAR EL BLOQUE");
+               free(bloque);
                return -1;
        }
        free(bloque);
index 77373569af5486ba7303a15f0e85dcc1b5d3f8cb..2afbd16ddf51ed44671568ef00de764d4b7969d6 100644 (file)
@@ -118,6 +118,13 @@ int main (int argc,char* argv[])
 
 clave.i_clave = 93;
 emufs_tipo1_eliminar_ordenado(emu, clave, &err);
+clave.i_clave = 99;
+emufs_tipo1_eliminar_ordenado(emu, clave, &err);
+clave.i_clave = 95;
+emufs_tipo1_eliminar_ordenado(emu, clave, &err);
+clave.i_clave = 77;
+emufs_tipo1_eliminar_ordenado(emu, clave, &err);
+
 
 /*
 for ( i=0; i<10000; i++){
index f9905ecfef879fe909f00d3b7f3370d457e415aa..435e86cad5923e1474a8fdb14f1affebee6a3eaa 100644 (file)
@@ -853,17 +853,17 @@ int emufs_tipo3_eliminar_ordenado(EMUFS *emu, CLAVE clave, int *err)
                        break;/*ya borre, corto aca*/
                }
                iter += tam_reg+sizeof(EMUFS_REG_ID);
-               aux += iter;
+               aux += tam_reg+sizeof(EMUFS_REG_ID);
        }
-       
        /*reacomodo el bloque */
-       memcpy(bloque+iter-tam_reg-sizeof(EMUFS_REG_ID), aux+iter, emu->tam_bloque-iter-sizeof(int)); 
+       memcpy(aux, aux+tam_reg+sizeof(EMUFS_REG_ID), emu->tam_bloque-iter-sizeof(int));
        /*le vuelvo a copiar la cantidad de registros*/
        cant_reg--;
        memcpy(bloque+emu->tam_bloque-sizeof(int), &cant_reg, sizeof(int));
        /*grabo el bloque en el archivo*/
-       if ( emufs_tipo3_grabar_bloque(emu, bloque, query.num_bloque) == EMUFS_NOT_FOUND ){
+       if ( emufs_tipo3_grabar_bloque(emu, bloque, query.num_bloque) == -1){
                PERR("NO SE PUDO GRABAR EL BLOQUE");
+               free(bloque);
                return -1;
        }
        free(bloque);
index fb2f0c2a7f4ee5732a131b4932da2fe3a1bedb76..057579d222a9cee0053869cd9c7bbd0665c5f57f 100644 (file)
@@ -42,8 +42,9 @@ int main (int argc,char* argv[])
        int err=0, i;
        
        texto = "PARTE COSNSTANTE, clave =";
-       texto2= "FIN DE REGISTRO DE LONG CONSTANTE";
-       emu = emufs_crear("test",T1,512,strlen(texto2));
+       texto2= "FIN DE REGISTRO DE LONG CONSTANTE LO HAGO MAS LARGO PARA PROBAR CUANDO SE PARTE UN BLOQUE";
+       printf("TAMANIO DE LOS REGISTROS = %d\n",strlen(texto)+sizeof(CLAVE)+strlen(texto2));
+       emu = emufs_crear("test",T3,512,strlen(texto)+sizeof(CLAVE)+strlen(texto2));
        emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo);
        
        
@@ -109,7 +110,16 @@ int main (int argc,char* argv[])
        PERR("REGISTRO 7 GRABADO");
        free(r);
 
-for ( i=0; i<10000; i++){
+/*
+clave.i_clave = 93;
+emufs_tipo3_eliminar_ordenado(emu, clave, &err);
+clave.i_clave = 99;
+emufs_tipo3_eliminar_ordenado(emu, clave, &err);
+clave.i_clave = 95;
+emufs_tipo3_eliminar_ordenado(emu, clave, &err);
+clave.i_clave = 77;
+emufs_tipo3_eliminar_ordenado(emu, clave, &err);
+/*for ( i=0; i<10000; i++){
        srandom(i);
        clave.i_clave = random();       
        r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
@@ -117,7 +127,7 @@ for ( i=0; i<10000; i++){
        emufs_tipo3_insertar_ordenado(emu, r, len, &err);
        free(r);
 }
-
+*/
 emufs_destruir(emu);
 
        return 0;