{
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;
/* 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));
/*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);
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++){
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);
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);
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));
emufs_tipo3_insertar_ordenado(emu, r, len, &err);
free(r);
}
-
+*/
emufs_destruir(emu);
return 0;