]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
Reacomodo el obtener siguiente para que pueda ser llamado via la mismas funcion que...
authorAlan Kennedy <kennedya@3dgames.com.ar>
Mon, 31 May 2004 01:30:55 +0000 (01:30 +0000)
committerAlan Kennedy <kennedya@3dgames.com.ar>
Mon, 31 May 2004 01:30:55 +0000 (01:30 +0000)
emufs/indice_bplus.c
emufs/indice_bplus.h
emufs/indices.c
emufs/indices.h
emufs/tipo1_bplus_main.c
emufs/tipo3_bplus_main.c

index 0793267552c4a6907c25ebd9c929af4915688450..0d4b59a17ab649ce7b4c3a9c1cc152b45b2b431c 100644 (file)
@@ -746,18 +746,17 @@ CLAVE emufs_b_plus_obtener_mayor_clave(INDICE *idx) {
        return key;
 }
 
-CLAVE emufs_b_plus_obtener_sig_clave(EMUFS *emu, CLAVE key) {
-       
-       INDICE *idx = emu->indices;
+CLAVE emufs_b_plus_obtener_sig_clave(INDICE *idx, CLAVE key) {
+               
        INDEX_DAT query;
        int i = 0;      
        query.clave = key;
        
        /* Si aun no tengo un array, obtengo uno */
-       if (emu->indices->keybucket == NULL) {
+       if (idx->keybucket == NULL) {
                /* Busco el ancla para esta key */
                emufs_b_plus_get_bloque(idx,&query,0);          
-               idx->keybucket = emu->obtener_claves_raw(emu,query.num_bloque);
+               idx->keybucket = idx->padre->obtener_claves_raw(idx->padre,query.num_bloque);
                /* Dejo el el iterador listo para la leer el siguiente, pues puede estar por el medio */
                i = idx->keybucket->cant_keys - 1;
                while (i >= 0 && emufs_indice_es_menor(idx,key,idx->keybucket->claves[i])) --i;
@@ -770,13 +769,13 @@ CLAVE emufs_b_plus_obtener_sig_clave(EMUFS *emu, CLAVE key) {
        /* Si me pide el siguiente de una clave que no esta en este bucket, pido un nuevo! */
        if (idx->keybucket != NULL) {
                i = idx->keybucket->cant_keys - 1;
-               while (i >= 0 && !emufs_indice_es_igual(emu->indices,key,idx->keybucket->claves[i])) --i;
+               while (i >= 0 && !emufs_indice_es_igual(idx,key,idx->keybucket->claves[i])) --i;
                if (i < 0) {
                        /* Debo obtener un nuevo bucket pues este debe ser de otro query viejo */
                        free(idx->keybucket->claves);
                        free(idx->keybucket);
                        emufs_b_plus_get_bloque(idx,&query,0);          
-                       idx->keybucket = emu->obtener_claves_raw(emu,query.num_bloque);
+                       idx->keybucket = idx->padre->obtener_claves_raw(idx->padre,query.num_bloque);
                        /* Dejo el el iterador listo para la leer el siguiente, pues puede estar por el medio */
                        i = idx->keybucket->cant_keys - 1;
                        while (i >= 0 && emufs_indice_es_menor(idx,key,idx->keybucket->claves[i])) --i;
@@ -794,7 +793,7 @@ CLAVE emufs_b_plus_obtener_sig_clave(EMUFS *emu, CLAVE key) {
                        if (b_plus_buscar_prepost(idx,idx->keybucket->claves[0],0,&query,1) != -1) {                                                                                            
                                free(idx->keybucket->claves);
                                free(idx->keybucket);
-                               idx->keybucket = emu->obtener_claves_raw(emu,query.num_bloque);                                                         
+                               idx->keybucket = idx->padre->obtener_claves_raw(idx->padre,query.num_bloque);                                                           
                                /*printf ("\nLevante bloque nro: %i y obtuve un bucket con %i keys\n",query.num_bloque,idx->keybucket->cant_keys);      
                                printf ("La primera clave del bucket que devuelvo es: %i\n",idx->keybucket->claves[0].i_clave);                         */
                        }
index 6cbd1f245fa0c11a4c2dd2925a64583ecfe4e98a..82e4bc60422cfe9f05f047ff009ca6f6fcfc5824 100644 (file)
@@ -28,6 +28,6 @@ int b_plus_buscar_prepost(INDICE *idx, CLAVE key, int num_node, INDEX_DAT *prepo
 int emufs_b_plus_reemplazar_clave(INDICE *idx, CLAVE key, INDEX_DAT query, int num_node);\r
 CLAVE emufs_b_plus_obtener_menor_clave(INDICE *idx);\r
 CLAVE emufs_b_plus_obtener_mayor_clave(INDICE *idx);\r
-CLAVE emufs_b_plus_obtener_sig_clave(EMUFS *emu, CLAVE key);\r
+CLAVE emufs_b_plus_obtener_sig_clave(INDICE *idx, CLAVE key);\r
 int b_plus_destruir_nodo(NODO_B_PLUS *nodo);\r
 #endif
index e223d273a0a6707e65ecb998506d19358facdb26..014cc5f0b3e8aaa8c98f8e6666071b3960d2378b 100644 (file)
@@ -90,7 +90,7 @@ INDICE *emufs_indice_crear(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, IND
                        emufs_b_plus_crear(tmp);
                        tmp->obtener_menor_clave = emufs_b_plus_obtener_menor_clave;
                        tmp->obtener_mayor_clave = emufs_b_plus_obtener_mayor_clave;
-                       tmp->obtener_sig_clave_isam = emufs_b_plus_obtener_sig_clave;
+                       tmp->obtener_sig_clave = emufs_b_plus_obtener_sig_clave;
                        break;
        }
 
index b5441e3cb093a4ec41009b4e3d6483f37bb4c0a9..8dc77ffb643b9998d1c9b501f668ff271fe42f6b 100644 (file)
@@ -91,8 +91,7 @@ typedef struct _indices_h_ {
 
        CLAVE (*obtener_menor_clave)(struct _indices_h_ *idx);
        CLAVE (*obtener_mayor_clave)(struct _indices_h_ *idx);
-       CLAVE (*obtener_sig_clave)(struct _indices_h_ *idx, CLAVE k);
-       CLAVE (*obtener_sig_clave_isam)(struct _emu_fs_t* emu, CLAVE k);
+       CLAVE (*obtener_sig_clave)(struct _indices_h_ *idx, CLAVE k);   
 
        char *nombre;   /**< Nombre Ășnico de busqueda del indice */
        char *filename; /**< nombre del archivo de indice */
index 5fe134b728eb59735149fdda3f943b208f0fde55..540d1581fea88ebb8f60daebd6baf5cba024c005 100644 (file)
@@ -208,11 +208,12 @@ for ( i=0; i<100; i++){
 
 prekey.clave = emu->indices->obtener_menor_clave(emu->indices);
 postkey.clave = emu->indices->obtener_mayor_clave(emu->indices);
+printf ("El mayor es %i\n",postkey.clave.i_clave);
 query = prekey;
-while (emufs_indice_es_menor(emu->indices,query.clave,postkey.clave))
+while (emufs_indice_es_menor(emu->indices,query.clave,postkey.clave) && query.clave.i_clave != -1)
 {
        q = query;
-       query.clave = emu->indices->obtener_sig_clave_isam(emu,query.clave);
+       query.clave = emu->indices->obtener_sig_clave(emu->indices,query.clave);
        printf("Sig de %i es %i\n",q.clave.i_clave,query.clave.i_clave);
 }
 
@@ -225,17 +226,17 @@ if (v==NULL) {
 }*/
 /*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]);
+       printf("v[%d] = %d\n", i, v->claves[i]);*/
 
-ver_arbol(emu);*/
+ver_arbol(emu);
 
-printf("Buscar el POST de:\n");
+/*printf("Buscar el POST de:\n");
 scanf("%d", &tecla);
 clave.i_clave = tecla;
 PERR("BUSCANDO");
 b_plus_buscar_prepost(emu->indices, clave, 0, &query, 1);
 
-printf("el post de %d, es %d\n", clave, query.clave);
+printf("el post de %d, es %d\n", clave, query.clave);*/
 
 emufs_destruir(emu);
 
index eb0ee42c0dc6b96e074c533941da529ebc377b56..b3dd377990428426ac0ce387b1339d5f76dbd70f 100644 (file)
@@ -238,17 +238,15 @@ 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]);*/
 
-
-
-
 prekey.clave = emu->indices->obtener_menor_clave(emu->indices);
 postkey.clave = emufs_b_plus_obtener_mayor_clave(emu->indices);
 querydata = prekey;
 
-while (querydata.clave.i_clave != -1)
+while (emufs_indice_es_menor(emu->indices,querydata.clave,postkey.clave))
+/*while (querydata.clave.i_clave != -1)*/
 {
        q = querydata;
-       querydata.clave = emu->indices->obtener_sig_clave_isam(emu,querydata.clave);
+       querydata.clave = emu->indices->obtener_sig_clave(emu->indices,querydata.clave);
        printf("Sig de %i es %i\n",q.clave.i_clave,querydata.clave.i_clave);
 }