]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
obtencion de claves en los tipos 4 y 5 finish
authorNicolás Dimov <ndimov@gmail.com>
Sun, 30 May 2004 08:08:28 +0000 (08:08 +0000)
committerNicolás Dimov <ndimov@gmail.com>
Sun, 30 May 2004 08:08:28 +0000 (08:08 +0000)
emufs/tipo3.c
emufs/tipo3.h
emufs/tipo3_bplus_main.c

index db461852d1480ed9930ca5a03f2f8b77f41a1fec..ba43342749e1d4cf3dde188db45d3b8eff538d01 100644 (file)
@@ -982,3 +982,42 @@ EMUFS_REG_ID emufs_tipo3_modificar_registro_plus(EMUFS *emu, CLAVE k, void *ptr
        emufs_tipo3_eliminar_ordenado(emu, k, dato);
        return emufs_tipo3_insertar_ordenado(emu, ptr, size, err);
 }
+
+B_PLUS_KEYBUCKET *emufs_tipo3_obtener_claves_raw(EMUFS *emu, int num_bloque)
+{
+       B_PLUS_KEYBUCKET *keys;
+       char *bloque;
+       int err = 0, cant_reg, i;
+       EMUFS_REG_SIZE tam_reg = emu->tam_reg;
+       
+       keys = (B_PLUS_KEYBUCKET*)malloc(sizeof(B_PLUS_KEYBUCKET));
+       if (keys == NULL){
+               PERR("NO SE PUDO CREAR EL BUCKET");
+               return NULL;
+       }
+       /*leo el bloque*/
+       bloque = emufs_tipo3_leer_bloque(emu, num_bloque, &err);
+       if ( bloque == NULL ){
+               PERR("NO SE PUDO LEER EL BLOQUE");
+               return NULL;
+       }
+       /*leo la cantidad de registros*/
+       memcpy(&cant_reg, bloque+emu->tam_bloque-sizeof(int), sizeof(int));
+       /*ya se cuanto guardarle al vector*/
+       keys->claves = (CLAVE*)malloc(cant_reg*sizeof(CLAVE));
+       if (keys->claves == NULL){
+               PERR("NO SE PUDO CREAR EL ARRAY DE CLAVES");
+               free(keys);
+               return NULL;
+       }
+       keys->cant_keys = cant_reg;
+       keys->current_key = 0;
+       
+       for (i=0; i<cant_reg; i++){
+               keys->claves[i] = emufs_indice_generar_clave(emu->indices, bloque+sizeof(EMUFS_REG_ID));
+               bloque += tam_reg+sizeof(EMUFS_REG_ID);
+       }
+               
+       free(bloque);
+       return keys;
+}
index 92ee8dec8250a48606fda586dbb6c027bf08938c..2229796e84a81053aaf7709f1c96e23430511239 100644 (file)
@@ -151,4 +151,6 @@ int emufs_tipo3_eliminar_ordenado(EMUFS *emu, CLAVE clave,INDICE_DATO dato);
 void *emufs_tipo3_leer_registro_plus(EMUFS *emu, CLAVE clave, EMUFS_REG_SIZE *size, int *err);
 
 EMUFS_REG_ID emufs_tipo3_modificar_registro_plus(EMUFS *emu, CLAVE k, void*, EMUFS_REG_SIZE, int*, INDICE_DATO);
+
+B_PLUS_KEYBUCKET *emufs_tipo3_obtener_claves_raw(EMUFS *emu, int num_bloque);
 #endif /* _EMUFS_TIPO3_H_ */
index e1b29420b302aa424c63d18515fbb4d30144cf7d..74f10662e81518fced349edf8130476677bcd85e 100644 (file)
@@ -79,7 +79,7 @@ int main (int argc,char* argv[])
        int err=0, i, res;
        INDICE_DATO dato;
        INDEX_DAT q;
-       
+       B_PLUS_KEYBUCKET *v;
        texto = "PARTE COSNSTANTE, clave =";
        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));
@@ -210,7 +210,9 @@ if (r)
 imprimir_reg(r, strlen(texto), size);
 */
 
-for ( i=0; i<5000; i++){
+
+
+for ( i=0; i<50; i++){
        srandom(i);
        clave.i_clave = random()%10000; 
        r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2));
@@ -219,7 +221,11 @@ for ( i=0; i<5000; i++){
        free(r);
 }
 
+v = emufs_tipo3_obtener_claves_raw(emu, 3);
 
+printf("Las claves del bloque 3 son:\n");
+for (i=0; i<v->cant_keys; i++)
+       printf("v[%d] = %d\n", i, v->claves[i]);
 
 
 ver_arbol(emu);