From: Nicolás Dimov Date: Sat, 29 May 2004 18:19:09 +0000 (+0000) Subject: al parecer andan bien los insertar y eliminar ordenado en los tipos 1 y 3 X-Git-Tag: svn_import_r684~118 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/7df902c12f32a2dd03ced69aacd8c1d0eddcfcee?ds=sidebyside al parecer andan bien los insertar y eliminar ordenado en los tipos 1 y 3 --- diff --git a/emufs/tipo1.c b/emufs/tipo1.c index 7de346f..bf15663 100644 --- a/emufs/tipo1.c +++ b/emufs/tipo1.c @@ -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); diff --git a/emufs/tipo1_bplus_main.c b/emufs/tipo1_bplus_main.c index 7737356..2afbd16 100644 --- a/emufs/tipo1_bplus_main.c +++ b/emufs/tipo1_bplus_main.c @@ -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++){ diff --git a/emufs/tipo3.c b/emufs/tipo3.c index f9905ec..435e86c 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -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); diff --git a/emufs/tipo3_bplus_main.c b/emufs/tipo3_bplus_main.c index fb2f0c2..057579d 100644 --- a/emufs/tipo3_bplus_main.c +++ b/emufs/tipo3_bplus_main.c @@ -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;