new_bloque = (char*)malloc(emu->tam_bloque);
move_size=0;
aux = bloque;
- for(i=0; i<cant_reg/2; i++){ /*copio mitad aca y mitad en el nuevo*/
+ for(i=0; i<cant_reg/2; i++){ /*copio mitad-1 aca y mitad en el nuevo*/
/*avanzo*/
memcpy(&tam_reg, aux+sizeof(EMUFS_REG_ID), sizeof(EMUFS_REG_SIZE));
aux += sizeof(EMUFS_TIPO1_REG_HEADER)+tam_reg;
move_size += sizeof(EMUFS_TIPO1_REG_HEADER)+tam_reg;
- }
- PERR("ME MOVI LA MITAD DE LOS REGISTROS");
+ }/*apunto al reg mitad_mas_uno para copiar todo a otro bloque*/
/*copio el resto del bloque al nuevo bloque*/ /*footer ¿?*/
- memcpy(new_bloque, aux, emu->tam_bloque-move_size/*-sizeof(int)*/);
+ memcpy(new_bloque, aux, emu->tam_bloque-move_size-sizeof(int));
/*borro lo que sobra en el bloque original, guardando el footer*/
memset(aux, 0, emu->tam_bloque - move_size - sizeof(int));
- /*actualizo la cant de registros del bloque original (footer)*/
- i++; /* 0 a n hay n+1 */
- memcpy(bloque+emu->tam_bloque-sizeof(int), &i, sizeof(int));
- /*actualizo el footer del nuevo bloque*/
- dif = cant_reg - i; /*por las dudas*/
- memcpy(new_bloque+emu->tam_bloque-sizeof(int), &dif, sizeof(int));
menor_clave_bloque_nuevo = emufs_indice_generar_clave(emu->indices, new_bloque+sizeof(EMUFS_TIPO1_REG_HEADER));
/* TENGO QUE VER EN CUAL DE LOS DOS BLOQUES METO EL REGISTRO NUEVO */
+ printf("I = %d\n", i ) ;
if ( emufs_indice_es_menor(emu->indices, menor_clave_bloque_nuevo, clave) ){
+ /* GRABO EN EL BLOQUE NUEVO */
+ /*actualizo la cant de registros del bloque original (footer)*/
+ memcpy(bloque+emu->tam_bloque-sizeof(int), &i, sizeof(int));
+ /*actualizo el footer del nuevo bloque*/
+ dif = cant_reg - i; /*por las dudas*/
+ printf("DIF = %d\n", dif);
+ memcpy(new_bloque+emu->tam_bloque-sizeof(int), &dif, sizeof(int));
/*genero un nuevo espacio para un bloque en el archivo y lo cargo en queryla clave ya estaba en query desde antes*/
+ num_bloque = query.num_bloque;
query.num_bloque = emufs_create_new_block(emu);
- printf("numero de bloque nuevo: %d\n", query.num_bloque);
/*inserto el nuevo registro en el nuevo bloque y obtengo la clave del menor*/
clave = grabar_ordenado_en_bloque(emu,ptr,size,new_bloque,query.num_bloque, emu->tam_bloque-move_size,err);
/*actualizo el arbol con la nueva clave*/
query.clave = clave;
emufs_b_plus_insertar(emu->indices, &query);
/*grabo el bloque original*/
- printf("numero de bloque viejo: %d\n", num_bloque);
emufs_tipo1_grabar_bloque_fsc(emu, bloque, num_bloque, EMUFS_NOT_FOUND, err);
} else {
- /*grabo el bloque nuevo*/
+ PERR("GRABO EN BLOQUE VIEJO");
+ /* GRABO EN EL BLOQUE VIEJO */
+ /*actualizo la cant de registros del bloque original (footer)*/
+ memcpy(bloque+emu->tam_bloque-sizeof(int), &i, sizeof(int));
+ /*actualizo el footer del nuevo bloque*/
+ dif = cant_reg - i; /*por las dudas*/
+ /*meto el footer en el reg */
+ memcpy(new_bloque+emu->tam_bloque-sizeof(int), &dif, sizeof(int));
+ /*guardo el num de bloque original */
+ num_bloque = query.num_bloque;
+ /* pido un bloque nuevo para guardar */
query.num_bloque = emufs_create_new_block(emu);
- printf("numero de bloque nuevo: %d\n", query.num_bloque);
- emufs_tipo1_grabar_bloque_fsc(emu, new_bloque, emufs_create_new_block(emu), EMUFS_NOT_FOUND, err);
- printf("numero de bloque viejo %d\n", num_bloque);
- grabar_ordenado_en_bloque(emu,ptr,size,bloque,query.num_bloque, fs-move_size,err);
-
+ /*grabo el bloque nuevo*/
+ emufs_tipo1_grabar_bloque_fsc(emu, new_bloque, query.num_bloque, EMUFS_NOT_FOUND, err);
+ /*grabo el registro en el bloque original*/
+ printf("espacio libre = %d\n", fs+move_size);
+ grabar_ordenado_en_bloque(emu,ptr,size,bloque,num_bloque, fs+move_size,err);
}
if(*err != 0){
PERR("NO SE PUDO GRABAR ORDENADO");
EMUFS_REG_SIZE len;
int err=0;
+ texto = "PARTE COSNSTANTE, clave =";
emu = emufs_crear("test",T1,512,0);
emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo);
- texto = "PARTE COSNSTANTE, clave =";
+
/*REGISTRO 1*/
clave.i_clave = 77;
texto2="termina el texto re bonito CLAVE = 77";
PERR("REGISTRO 2 GRABADO");
free(r);
-/*REGISTRO 3
+/*REGISTRO 3 */
texto2="Este es el fin del registro tres, puse tres en numero para que sea mas largo el texto CLAVE = 95";
clave.i_clave = 95;
r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
PERR("REGISTRO 3 GRABADO");
free(r);
-/*REGISTRO 4
+/*REGISTRO 4 */
texto2="REGISTRO CUATRO CLAVE = 99";
clave.i_clave = 99;
r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
PERR("REGISTRO 4 GRABADO");
free(r);
-/*REGISTRO 5
+/*REGISTRO 5 */
texto2="el quinto registro tiene un largo promedio como para entrar en el bloque CLAVE = 102";
clave.i_clave = 102;
r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
free(r);
/*REGISTRO 6*/
-/* texto2="El registro 6 no entra CLAVE = 106";
- clave.i_clave = 106;
+ texto2="El registro 6 no entra CLAVE = 93";
+ clave.i_clave = 93;
r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE));
len = strlen(texto)+strlen(texto2)+sizeof(CLAVE);
PERR("REGISTRO 6 GRABADO");
free(r);
emufs_destruir(emu);
-*/
+
return 0;
}