From 8566a6c1619679a921a1dc9bcdede575ceff2e61 Mon Sep 17 00:00:00 2001 From: Alan Kennedy Date: Mon, 31 May 2004 01:30:55 +0000 Subject: [PATCH] Reacomodo el obtener siguiente para que pueda ser llamado via la mismas funcion que para B y B*. Esta un poco buggy con tipo1, ahora lo voy a tener que seguir revisando --- emufs/indice_bplus.c | 15 +++++++-------- emufs/indice_bplus.h | 2 +- emufs/indices.c | 2 +- emufs/indices.h | 3 +-- emufs/tipo1_bplus_main.c | 13 +++++++------ emufs/tipo3_bplus_main.c | 8 +++----- 6 files changed, 20 insertions(+), 23 deletions(-) diff --git a/emufs/indice_bplus.c b/emufs/indice_bplus.c index 0793267..0d4b59a 100644 --- a/emufs/indice_bplus.c +++ b/emufs/indice_bplus.c @@ -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); */ } diff --git a/emufs/indice_bplus.h b/emufs/indice_bplus.h index 6cbd1f2..82e4bc6 100644 --- a/emufs/indice_bplus.h +++ b/emufs/indice_bplus.h @@ -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); CLAVE emufs_b_plus_obtener_menor_clave(INDICE *idx); CLAVE emufs_b_plus_obtener_mayor_clave(INDICE *idx); -CLAVE emufs_b_plus_obtener_sig_clave(EMUFS *emu, CLAVE key); +CLAVE emufs_b_plus_obtener_sig_clave(INDICE *idx, CLAVE key); int b_plus_destruir_nodo(NODO_B_PLUS *nodo); #endif diff --git a/emufs/indices.c b/emufs/indices.c index e223d27..014cc5f 100644 --- a/emufs/indices.c +++ b/emufs/indices.c @@ -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; } diff --git a/emufs/indices.h b/emufs/indices.h index b5441e3..8dc77ff 100644 --- a/emufs/indices.h +++ b/emufs/indices.h @@ -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 */ diff --git a/emufs/tipo1_bplus_main.c b/emufs/tipo1_bplus_main.c index 5fe134b..540d158 100644 --- a/emufs/tipo1_bplus_main.c +++ b/emufs/tipo1_bplus_main.c @@ -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; icant_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); diff --git a/emufs/tipo3_bplus_main.c b/emufs/tipo3_bplus_main.c index eb0ee42..b3dd377 100644 --- a/emufs/tipo3_bplus_main.c +++ b/emufs/tipo3_bplus_main.c @@ -238,17 +238,15 @@ printf("Las claves del bloque 3 son:\n"); for (i=0; icant_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); } -- 2.43.0